2012-07-17 9 views
7

मुझे एक ऐसी सेवा मिली है जो डेटा के लिए वेबसाइट स्क्रैप करे, यदि आवश्यक हो तो उपयोगकर्ता को एक सूचना दें।सेवा समाप्त होने पर सूचनाएं गायब हो जाती हैं

समस्या मैं आ रही

कि सूचनाएं ही गायब सेवा बंद (तुरन्त हो सकता है) के रूप में है। नीचे दिया गया कोड ऐप के सभी अधिसूचना कोड है। मैंने नोटिफिकेशन रद्द करने के लिए किसी भी कोड में नहीं रखा है।

public static void CreateNotificationCompat(int notificationID, String link, String title, String text, Context ctx) 
{ 
    Intent notificationIntent = new Intent("android.intent.action.VIEW", Uri.parse(link)); 
    PendingIntent contentIntent = PendingIntent.getActivity(ctx.getApplicationContext(), 0, notificationIntent, 0); 

    NotificationManager nm = (NotificationManager) ctx 
      .getSystemService(Context.NOTIFICATION_SERVICE); 

    NotificationCompat.Builder builder = new NotificationCompat.Builder(ctx); 
    Resources res = ctx.getResources(); 

    builder.setContentIntent(contentIntent) 
       .setSmallIcon(R.drawable.notify_icon) 
       .setWhen(System.currentTimeMillis()) 
       .setContentTitle(title) 
       .setContentText(text) 
       .setAutoCancel(false); 

    Notification n = builder.getNotification(); 

    nm.notify(notificationID, n); 
} 

यदि यह किसी भी फर्क नहीं पड़ता मैं यहाँ आवेदन संदर्भ का उपयोग कर रहा (यकीन है कि यह नहीं है)।

मेरे सेवाओं को समय-समय शुरू होता है, एक वेबसाइट प्रोसेस करता है, यदि आवश्यक हो तो सूचित करता है और फिर बंद कर देता है।

मेरी सेवा के अंत के बजाय सिर्फ stopSelf बुला() मैं 30 या तो सेकंड के लिए सोने और उसके बाद() stopSelf फोन पर। तब अधिसूचना 30 सेकंड तक रहती है और फिर गायब हो जाती है। नोटिफिकेशन गायब होने पर लॉगकैट में कुछ भी प्रासंगिक नहीं दिखाई देता है।

मैं केवल अब तक आईसीएस मदद से इसका परीक्षण कर लिया है।

+0

यह ठीक होना चाहिए। आम तौर पर अधिसूचनाएं गायब हो जाएंगी यदि आपका आवेदन जबरन मार डाला गया है। मैं उम्मीद करता हूं कि कुछ दुर्घटनाग्रस्त हो रहा है। यह देखना दिलचस्प होगा कि आप "नींद" के लिए किस कोड का उपयोग कर रहे हैं (क्या आप वास्तव में थ्रेड को सो रहे हैं?) और क्या थ्रेड चल रहा है। प्रयोग के लिए 30s नींद को हटाने की कोशिश करना और यह देखना भी दिलचस्प होगा कि क्या वही व्यवहार होता है। – kabuko

+0

कोड है जहां आपके पास कोई सूचना है तो नोटिफिकेशन रद्द कर देता है? इसके अलावा एफवाईआई आपको एंड्रॉइड.intent.action जैसे प्रत्यक्ष स्ट्रिंग का उपयोग नहीं करना चाहिए। * क्योंकि यह एक कॉन्स्टेंट है जो इरादे वर्ग में उपलब्ध है। @ user1531605 – JoxTraex

+0

अगर सेवा से अनुरोध किया जाता है कि "अधिसूचना पहले" अधिसूचना पोस्ट की गई है, यानी उसी कोड निष्पादन श्रृंखला पर, अधिसूचना को मंजूरी दे दी जाएगी। –

उत्तर

2

आप लग रहे पहले भूल करने के लिए चेक डेवलपर मैनुअल। यहां देखें http://developer.android.com/guide/topics/ui/notifiers/notifications.html और FLAG_ONGOING_EVENT और FLAG_NO_CLEAR झंडे देखें।

मैं अब तक आईसीएस का उपयोग करके परीक्षण करने में सक्षम हूं।

यही कारण है कि सिमुलेटर काफी उपयोगी हैं। कोशिश करो। यह एसडीके का हिस्सा है।

+0

मैंने इसे पढ़ा, वे नहीं हैं जो मैं चाहता हूं। अधिसूचनाओं को "अधिसूचनाएं साफ़ करें" बटन से साफ़ करने में सक्षम होना चाहिए, इसलिए FLAG_NO_CLEAR मदद नहीं करेगा। और यह एक चल रही घटना नहीं है। दस्तावेज़ों से "यह सेट नहीं किया जाना चाहिए यदि यह अधिसूचना उस समय के किसी विशेष बिंदु पर हुई किसी मिस्ड फोन कॉल की तरह है।" यह वही है जो किसी विशेष बिंदु पर हुआ कुछ ऐसा है। हालांकि एक sidenote के रूप में, मैंने केवल उन मामलों में उन झंडे के साथ परीक्षण किया था और एक ही परिणाम था। सेवा बंद होने पर सूचनाएं अभी भी गायब हो गईं। – user1531605

+0

क्या आपने अपना कोड प्री 4.x एंड्रॉइड पर चेक किया है? एम्यूलेटर पर्याप्त है। –

+0

अपनी सेवा के स्रोत कोड को पोस्ट करें, केवल सृजन और विनाश की तरह प्रासंगिक। – JoxTraex

4

आपके द्वारा पोस्ट किया गया कोड काम करता है। मैंने इसे जेबी पर एक गतिविधि और एक सेवा दोनों से परीक्षण किया, और जब घटक बंद हो जाते हैं तो अधिसूचना रहता है। मैंने यह भी सत्यापित किया कि मैं प्रक्रिया को मार सकता हूं और अधिसूचना रहता है। ऐप को पट्टी करने का प्रयास करें और देखें कि समस्या बनी रहती है या नहीं। विशेष रूप से यह देखने के लिए जांचें कि आप गलती से अधिसूचना पर रद्द नहीं करते हैं।

1

एक ही डिवाइस पर पुराने तरीके से कोशिश करते हैं और हमें बताएं कि यह उसी तरह बर्ताव करता है करें:

private static void CreateNotificationCompat(int notificationID, String link, String title, String text, Context ctx) { 
    String ns = Context.NOTIFICATION_SERVICE; 
    NotificationManager mNotificationManager = (NotificationManager) ctx.getSystemService(ns); 
    Notification notification = new Notification(R.drawable.notify_icon, title, System.currentTimeMillis()); 
    notification.flags = Notification.FLAG_AUTO_CANCEL; 
    PendingIntent contentIntent; 
    Bundle bundle = new Bundle(); 
    Intent notificationIntent = new Intent("android.intent.action.VIEW", Uri.parse(link)); 
    contentIntent = PendingIntent.getActivity(ctx, notificationID, 
       notificationIntent, 0); 
    notification.setLatestEventInfo(ctx, title, text, 
      contentIntent); 
    mNotificationManager.notify(notificationID, notification); 
}