2011-08-06 11 views
6

मुझे कुछ एप्लिकेशन लिखना होगा जो पृष्ठभूमि में कुछ काम करेगा। यह एप्लिकेशन ऑटोस्टार्ट से चलाया जाएगा और कोई भी प्रारंभिक गुई नहीं होगा। गुई को अधिसूचना पर क्लिक से कॉल किया जा सकता है जो ऑटोस्टार्ट के साथ दिखाया जाएगा। मुझे चिंता है कि, जब उपयोगकर्ता अधिसूचनाएं साफ़ करता है तो उसने इस गुई को कॉल करने का अवसर खो दिया। मेरा सवाल यह है कि उपयोगकर्ता द्वारा मेरी अधिसूचना को समाशोधन करने का कोई तरीका है?मेरे आवेदन के लिए समाशोधन अधिसूचना अक्षम करें

उत्तर

-4

पर प्रभाव देना चाहिए, आप Foreground Service को कार्यान्वित करना चाहते हैं।

+0

एक अग्रभूमि सेवा काम करेगी क्योंकि यह "स्मृति पर कम होने पर सिस्टम को मारने के लिए उम्मीदवार नहीं है" और अधिसूचना दिखाने की आवश्यकता है। लेकिन क्या यह वास्तव में एक अधिसूचना प्रदर्शित करने के उद्देश्य से पूरी तरह से सेवा बनाने का सबसे अच्छा अभ्यास है जिसे साफ़ नहीं किया जा सकता है? कुरो का जवाब बहुत बेहतर लगता है। – spaaarky21

4

आप अधिसूचनाओं के "चल रहे" खंड में अधिसूचना बनाने के लिए देखना चाहते हैं। जब उपयोगकर्ता उन्हें साफ़ करता है तो ये अधिसूचनाएं साफ़ नहीं होती हैं।

Notification.FLAG_NO_CLEAR और Notification.FLAG_ONGOING_EVENT का उपयोग करें। इससे आपको

+1

क्या वास्तव में दोनों का उपयोग करने का कोई कारण है? एंड्रॉइड 4.2.x पर, मैं केवल अधिसूचना का उपयोग कर रहा हूं। बिल्डर.सेटऑनगोइंग() और यह स्वयं ही अधिसूचना को मंजूरी से रोकने के लिए प्रतीत होता है। मैं उत्सुक था क्योंकि मैंने देखा कि अधिसूचना। बिल्डर के पास ऐसा कोई प्रतीत नहीं होता है जो FLAG_NO_CLEAR से मेल खाता हो। – spaaarky21

17

यहां एक अधिसूचना है जो उपयोगकर्ता को इसे साफ़ करने की अनुमति नहीं देगी।

Notification notification = new NotificationCompat.Builder(this) 
     .setTicker(r.getString(R.string.app_name)) 
     .setSmallIcon(R.drawable.ic_launcher) 
     .setContentTitle(r.getString(R.string.app_name)) 
     .setAutoCancel(false) 
     .setOngoing(true) 
     .build(); 

setOngoing(true) कॉल acheives इस, और setAutoCancel(false) दूर जा रहा है जब उपयोगकर्ता अधिसूचना टैप करता से अधिसूचना बंद हो जाता है।

यदि आवेदन बुला CancelAll रद्द या द्वारा की स्थापना रद्द या है अधिसूचना साफ कर दिया जाएगा: http://developer.android.com/reference/android/app/NotificationManager.html#cancel(int)

+0

अधिसूचना बिल्कुल नहीं दिख रही है। – ralphgabb

+0

@ralphspoon कृपया एक नया प्रश्न पूछें और यहां लिंक करें – cja

1

हालांकि @cja जवाब सही हो सकता है, हालांकि वह कोड में से कुछ कुछ लाइनें (अधिसूचना अभ्यस्त दिखाने या अभ्यस्त पर प्रदर्शित याद आ रही है आपकी अधिसूचना ट्रे)।

यह पूरा काम कर समारोह है:

public void createNotification() { 
    NotificationCompat.Builder notification = new NotificationCompat.Builder(this); 

    notification.setTicker("Ticker Text"); 
    notification.setSmallIcon(R.drawable.ic_launcher); 
    notification.setContentTitle("Content Title"); 
    notification.setContentText("Content Text"); 
    notification.setAutoCancel(false); 
    notification.setOngoing(true); 
    notification.setNumber(++NotificationCount); 

    Intent intent = new Intent(this, MainActivity.class); 
    PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0); 
    notification.setContentIntent(pIntent); 

    notification.build(); 

    NotificationManager nManger = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    nManger.notify(NotificationID, notification.build()); 
} 

NotificationID पूर्णांक अपनी अधिसूचना की आईडी के रूप में काम कर रहा है।

आप इस का उपयोग करके इसे साफ कर सकते हैं:

public void clear() { 
    NotificationManager oldNoti = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    oldNoti.cancel(NotificationID); 
} 

सुनिश्चित करें कि notification.setAutoCancel(false);झूठी तो यह जब स्पष्ट बटन दबाने या कड़ी चोट इशारा उपस्थित होता है जब साफ किया जा नहीं होते पर सेट है।

कोड की कुछ पंक्तियां मूल रूप से @cja पोस्ट से हैं। उपयोगकर्ता को छू लेती है जब यह और FLAG_ONGOING_EVENT यह एक Ongoing Notification बनाने

चियर्स/खुश codings ...

+0

धन्यवाद @ralphgabb मैंने इसका उपयोग करने की कोशिश की लेकिन फिर भी मैं साफ़ सभी पर क्लिक करके अधिसूचना को साफ़ करने और इशारा स्वाइप करने में सक्षम हूं। मैं कम से कम एपीआई स्तर 1 9 और लक्ष्य एपीआई स्तर 25 – bhavikshah28

+0

पर अजीब, बीमार कोशिश कर रहा हूं, यह कार्य वास्तव में मेरे अंत (कई परियोजनाओं पर प्रयुक्त) पर काम करता है या आप यहां अपने कोड की कुछ पंक्तियां पोस्ट कर सकते हैं। – ralphgabb

+0

@ralphgaab https://prnt.sc/hpzi9e – bhavikshah28

0

बस अधिसूचना को इन दो झंडे जोड़ने के लिए, FLAG_AUTO_CANCEL अधिसूचना को रोकने के लिए स्वचालित रूप से खारिज कर दिया।

notification.flags=Notification.FLAG_AUTO_CANCEL|Notification.FLAG_ONGOING_EVENT; 
संबंधित मुद्दे