अगले दृष्टिकोण अच्छी तरह से काम करेगा आप आने Google मेघ संदेश सेवा (C2DM) अपनी गतिविधि से संभाल (यदि हो तो चल रहा है) या एक अधिसूचना जारी करता है, तो कोई गतिविधियों चल रहे हैं करना चाहते हैं।
मैनिफेस्ट फ़ाइल में एक ब्रॉडकास्ट रिसीवर पंजीकृत करें। जब भी एप्लिकेशन नहीं चल रहा है तो यह रिसीवर सी 2 डी संदेशों को संभालेगा। अपनी गतिविधि में प्रोग्रामेटिक रूप से एक और ब्रॉडकास्ट रिसीवर पंजीकृत करें। जब भी गतिविधि चल रही है तो यह रिसीवर सी 2 डी संदेशों को संभालेगा।
AndoroidManifest.xml
<receiver
android:name=".StaticReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.mypackage" />
</intent-filter>
</receiver>
MyReceiver.java
public class StaticReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Trigger a Notification
}
}
MyActivity.java
public class MyActivity extends ActionBarActivity {
@Override
protected void onResume() {
super.onResume();
final IntentFilter filter = new
IntentFilter("com.google.android.c2dm.intent.RECEIVE");
filter.addCategory("com.mypackage");
filter.setPriority(1);
registerReceiver(dynamicReceiver, filter,
"com.google.android.c2dm.permission.SEND", null);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(dynamicReceiver);
}
private final BroadcastReceiver dynamicReceiver
= new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent) {
// TODO Handle C2DM
// blocks passing broadcast to StaticReceiver instance
abortBroadcast();
}
};
}
नोट! पहले प्रसारण को पकड़ने के लिए, डायनामिक रिसीवर इंटेंटफिल्टर की प्राथमिकता स्टेटिक रिसीवर इंस्टेंस इंटेंटफिल्टर की प्राथमिकता से अधिक होनी चाहिए (डिफ़ॉल्ट प्राथमिकता '0' है)।
पीएस। ऐसा लगता है कि Google क्लाउड मैसेजिंग सेवा द्वारा जारी किए गए प्रसारण ब्रॉडकास्ट का आदेश दिया गया है।मूल विचार लेखक: CommonsWare
स्रोत
2014-03-27 12:46:10
पहली विधि घुसपैठ कर रही है, लेकिन मैं जानना चाहता हूं कि कोई गतिविधि चल रही है या नहीं, जैसे कि मेरा एप्लिकेशन चल रहा है (सेवा को छोड़कर) स्थैतिक विधि अच्छा नहीं है क्योंकि गतिविधि में एक से अधिक उदाहरण हो सकते हैं शायद एक आवेदन mutex होगा चाल करें ... – codeScriber
मैं गलत हो सकता हूं लेकिन मुझे लगता है कि यह केवल एक कार्य में वर्तमान शीर्ष गतिविधि की जांच करता है। यदि हां, तो एक ही कार्य में अन्य गतिविधियों (रोका या बंद) के बारे में क्या? –
पहली विधि का उपयोग न करें। ActivityManager दस्तावेज़ से: "नोट: यह विधि केवल कार्य प्रबंधन उपयोगकर्ता इंटरफेस को डिबगिंग और प्रस्तुत करने के लिए है। इसका उपयोग किसी एप्लिकेशन में कोर लॉजिक के लिए कभी नहीं किया जाना चाहिए, जैसे यहां प्राप्त जानकारी के आधार पर विभिन्न व्यवहारों के बीच निर्णय लेना।" – yarian