2012-09-20 14 views
6

मेरे पास एक अग्रभूमि सेवा अधिसूचना है कि क्लिक करने पर गतिविधि शुरू होनी चाहिए। इसे समाप्त करने से पहले यह गतिविधि बहुत कम रहती है()।अधिसूचना लंबित सामग्री सामग्री जब कॉल कॉल समाप्त हो जाती है()

Sending contentIntent failed: android.app.PendingIntent$CanceledException 

मेरी कोड में जब अग्रभूमि सेवा सूचना बनाकर, मैं randomActivity.class को बदल दिया है:

पहली बार अधिसूचना क्लिक किया जाता है यह काम करता है, दूसरी बार है और उसके बाद मैं त्रुटि मिलती है एक अन्य गतिविधि वर्ग जो खत्म नहीं करता है और यह हर क्लिक पर पूरी तरह से काम करता है। से:

Intent notificationIntent = new Intent(this, RandomActivity.class); 

रहे हैं:

Intent notificationIntent = new Intent(this, HomeActivity.class); 

ठीक काम करता है ...

मैं अधिसूचना बिल्डर का उपयोग कर इसे परीक्षण के रूप में Android डेवलपर की वेबसाइट से मानक अधिसूचना कोड का उपयोग किया है, साथ ही। मुझे एक ही परिणाम मिलते हैं। जब तक गतिविधि कॉल समाप्त नहीं होती है तब तक यह पूरी तरह से काम करता है();

क्या यह अपेक्षित व्यवहार, एक बग है, या क्या मुझे कुछ याद आ रही है?

मैं आपकी सहायता के लिए अग्रिम धन्यवाद और आशा करता हूं कि समाधान!

नोट: मैं जिस अधिसूचना कोड का उपयोग करता हूं वह पूरी तरह से मानक है, इसलिए मैंने इसे पोस्ट नहीं किया है। यादृच्छिक सक्रियता कॉल खत्म(); ऑनक्रेट में, इसलिए वहां देखने के लिए असामान्य कुछ भी नहीं है।

उत्तर

9

सबकुछ करने की कोशिश करने के बाद मैं संभवतः एक समाधान मिला। अगर किसी को इस मुद्दे पर भी ठोकर खाई जाती है तो पोस्टिंग।

मुझे अधिसूचना आईडी में int अनुरोध कोड से मेल खाना पड़ा। क्यूं कर? बिल्कुल कोई विचार नहीं ... मैं केवल यह मान सकता हूं कि यह इरादा डेटा को शून्य या पुन: उपयोग करने से रोकता है?

private static int ONGOING_NOTIFICATION_ID = 76; 

    PendingIntent contentIntent = PendingIntent.getActivity(this, 
    ONGOING_NOTIFICATION_ID, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

startForeground करने के लिए सूचना आईडी के रूप में ही:

this.startForeground(ONGOING_NOTIFICATION_ID, not); 

आशा इस कोई मदद करता है।

+0

मैं @brandall से सहमत हूं। यदि आप एक्शन बटन का उपयोग कर रहे हैं, तो अधिसूचना आईडी को अभी भी सामग्री इन्टेंट से अनुरोध कोड का उपयोग करना चाहिए और किसी भी कार्रवाई के इरादे से नहीं। – fahmad6

2

मुझे अधिसूचना आईडी (जैसा आपने सुझाव दिया) की जांच करने की आवश्यकता नहीं थी, लेकिन मुझे FLAG_ONE_SHOT की बजाय ध्वज को FLAG_UPDATE_CURRENT पर बदलना पड़ा।

FLAG_ONE_SHOT के साथ, लंबित इरादा एक बार वितरित हो जाने के बाद रद्द हो जाता है, और इसके बाद, अधिसूचना टैप करने की कोई भी राशि उसी लंबित इरादे को फिर से वितरित करने की अनुमति नहीं देगी, इसलिए अपवाद।

यह मेरे लिए समस्या थी।

संबंधित मुद्दे