अधिसूचनाएं आपके ऐप द्वारा प्रबंधित नहीं की जाती हैं और अधिसूचनाएं दिखाने और उन्हें साफ़ करने जैसी सभी चीजें वास्तव में किसी अन्य प्रक्रिया में होती जा रही हैं। सुरक्षा कारणों से आप एक और ऐप सीधे कोड के टुकड़े को निष्पादित नहीं कर सकते हैं।
आपके मामले में एकमात्र संभावना PendingIntent
प्रदान करना है जो केवल एक नियमित मंशा के आसपास लपेटती है और अधिसूचना को मंजूरी मिलने पर आपके ऐप की तरफ से शुरू किया जाएगा। आपको प्रसारण भेजने या सेवा शुरू करने के लिए PendingIntent
का उपयोग करने की आवश्यकता है और फिर प्रसारण रिसीवर में या सेवा में जो भी आप चाहते हैं उसे कर सकते हैं। वास्तव में उपयोग करने के लिए आप किस एप्लिकेशन घटक को नोटिफिकेशन दिखा रहे हैं, इस पर निर्भर करता है।
प्रसारण रिसीवर के मामले में आप प्रसारण रिसीवर के लिए केवल एक अज्ञात आंतरिक कक्षा बना सकते हैं और अधिसूचना दिखाने से पहले इसे गतिशील रूप से पंजीकृत कर सकते हैं। यह कुछ ऐसा दिखाई देगा:
public class NotificationHelper {
private static final String NOTIFICATION_DELETED_ACTION = "NOTIFICATION_DELETED";
private final BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
aVariable = 0; // Do what you want here
unregisterReceiver(this);
}
};
public void showNotification(Context ctx, String text) {
Intent intent = new Intent(NOTIFICATION_DELETED_ACTION);
PendingIntent pendintIntent = PendingIntent.getBroadcast(ctx, 0, intent, 0);
registerReceiver(receiver, new IntentFilter(NOTIFICATION_DELETED_ACTION));
Notification n = new Notification.Builder(mContext).
setContentText(text).
setDeleteIntent(pendintIntent).
build();
NotificationManager.notify(0, n);
}
}
स्रोत
2012-10-23 12:00:14
मैं इरादे से सेवा के साथ कोशिश कर रहा हूं। एक अपवाद उद्देश्य प्राप्तकर्ता प्राप्त कर लिया गया है। "क्या आप अनियंत्रित रिसीवर को कॉल खो रहे हैं?" क्या कोई इस पर कोई प्रकाश डाल सकता है? – Yasir
रजिस्टर और पंजीकरण रद्द करने वाले रिसीवर को एक असुरक्षित संदर्भ से कॉल किया जाना चाहिए, इसलिए intentService में getApplicationContext() का उपयोग करके अपनी समस्या का समाधान करना चाहिए। – smora
मैं स्थिर रिसीवर पंजीकृत करने की अनुशंसा करता हूं (उदा। जो AndroidManifest में पंजीकृत है), क्योंकि उस समय उपयोगकर्ता को अधिसूचना खारिज कर दिया जा सकता है। स्टेटिक रिसीवर यह सुनिश्चित करता है कि कोड पहले से ही मर चुका है, भले ही कोड निष्पादित किया जाएगा। – pepyakin