android - एंड्रॉइड लंबित इरादा अधिसूचना समस्या




notifications android-intent (3)

मेरे ऐप में एक अलार्म चीज चल रही है और यह एक अधिसूचना लॉन्च करता है कि तब दबाए जाने पर एक गतिविधि शुरू की गई। समस्या यह है कि जब मैं एक से अधिक अलार्म बनाता हूं तो अधिसूचना से शुरू की गई गतिविधि पहले के समान ही अतिरिक्त हो जाती है। मुझे लगता है कि समस्या या तो इरादे से है जो मैंने लंबित इरादे में या लंबित इरादे में रखी है। मुझे लगता है कि मुझे इनमें से किसी एक पर झंडा लगाने की आवश्यकता हो सकती है लेकिन मुझे नहीं पता कि कौन सा है।

Intent showIntent =new Intent(context, notificationreceiver.class);
    showIntent.putExtra("details", alarmname);

PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
        showIntent, 0); 

    notification.setLatestEventInfo(context, "The event is imminent",
            alarmname, contentIntent);

और अधिसूचना प्राप्तकर्ता

Bundle b = getIntent().getExtras();
    String eventname = b.getString("details");
    details.setText(eventname);

अगली बार अलग-अलग मूल्य होने के बजाय अधिसूचना होती है, तो "विवरण" अतिरिक्त प्रत्येक के समान होता है। जब तक मैं इरादों को निर्धारित नहीं करता हूं, मुझे यकीन है कि सही मूल्य "विवरण" पर जाता है, इसलिए हर बार जब मैं कोई अधिसूचना दबाता हूं तो पहला इरादा प्राप्त करने की समस्या होती है। मैं इसे सही इरादों को लॉन्च करने के लिए कैसे बना सकता हूं? उम्मीद है कि मैं स्पष्ट था क्योंकि मैं धन्यवाद कर सकता था!


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

सही बात।

मैं इसे सही इरादों को लॉन्च करने के लिए कैसे बना सकता हूं?

यह इस बात पर निर्भर करता है कि आपके पास दो अलार्म हैं जो एक बार में पंजीकृत होंगे या नहीं।

यदि नहीं, तो आप अपने दूसरे PendingIntent को नए एक्स्ट्रा का उपयोग करने के लिए FLAG_ONE_SHOT या अन्य PendingIntent झंडे का उपयोग कर सकते हैं

यदि, हालांकि, आपके पास अलग-अलग Intent एक्स्ट्रा के साथ एक बार में पंजीकृत दो अलार्म होंगे, तो आपको दो filterEquals() अधिक भौतिक रूप से अलग करने की आवश्यकता होगी, जैसे कि filterEquals() तुलना filterEquals() दोनों की तुलना करते समय false रिटर्न filterEquals() । उदाहरण के लिए, आप setData() या setAction() को कॉल कर सकते हैं और प्रत्येक Intent लिए अलग-अलग मान प्रदान कर सकते हैं।


जिस तरह से मैंने हल किया वह समस्या एक अनन्य अनुरोध कोड देकर थी जब आप लंबित इंटेंट प्राप्त करते हैं:

PendingIntent.getActivity(context, requestCode, showIntent, 0); 

ऐसा करके आप सिस्टम के साथ अलग / अद्वितीय इरादों के उदाहरण के साथ पंजीकरण कर रहे हैं। युक्ति: अनुरोध कोड बनाने का एक अच्छा तरीका वर्तमान सिस्टम समय से गुजरकर होगा।

int requestID = (int) System.currentTimeMillis();

एक और समाधान:

इस तरह लंबित INTent.FLAG_UPDATE_CURRENT का उपयोग करें:

PendingIntent contentIntent = PendingIntent.getActivity(this, 0,i, PendingIntent.FLAG_UPDATE_CURRENT);

यह मेरे लिए काम किया





android-intent