android - लंबित इंटेंट से शुरू किए गए इरादे से एक्स्ट्रा प्राप्त करें




android-intent bundle (4)

आपको intent.putExtra() विधि का उपयोग करना चाहिए। अतिरिक्त खंड में बंडल सेट नहीं है। यदि आप स्ट्रिंग सेट करते हैं, तो आप intent.putExtra(<key>, value); कर सकते हैं intent.putExtra(<key>, value); कोशिश करो यह किया जाएगा। मै उसका इस्तेमाल किया।

मैं किसी सूची से कुछ समय के साथ कुछ चुनने के बाद कुछ समय के लिए कुछ अलार्म बनाने की कोशिश कर रहा हूं और दिए गए समय पर इसके लिए एक अधिसूचना बना रहा हूं। मेरी समस्या यह है कि "दिखाया गया" कि मेरे इरादे पर एक PutExtra प्रसारण रिसीवर पर प्राप्त नहीं किया जा सकता है। यह हमेशा शून्य मूल्य मिलता है। इस तरह से मैं अपने अधिकांश इरादों के लिए ऐसा करता हूं लेकिन मुझे लगता है कि इस बार शायद लंबित इंटेंट या ब्रॉडकास्ट रिसीवर की वजह से कुछ अलग-अलग किया जाना चाहिए। धन्यवाद

वह कार्य जो लंबित मंशा के माध्यम से इरादा भेजता है

public void setAlarm(String showname,String time) {

    String[] hourminute=time.split(":");
    String hour = hourminute[0];
    String minute = hourminute[1];
    Calendar rightNow = Calendar.getInstance();
    rightNow.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hour));
    rightNow.set(Calendar.MINUTE, Integer.parseInt(minute));
    rightNow.set(Calendar.SECOND, 0);
    long t=rightNow.getTimeInMillis();
    long t1=System.currentTimeMillis();

    try {   

    Intent intent = new Intent(this, alarmreceiver.class);  
    Bundle c = new Bundle();            
    c.putString("showname", showname);//This is the value I want to pass
    intent.putExtras(c);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 12345, intent, 0);

    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, rightNow.getTimeInMillis(),pendingIntent);
    //Log.e("ALARM", "time of millis: "+System.currentTimeMillis());
    Toast.makeText(this, "Alarm set", Toast.LENGTH_LONG).show();

    } catch (Exception e) {
        Log.e("ALARM", "ERROR IN CODE:"+e.toString());
    }
}

और यह प्राप्त करने वाला अंत है

public class alarmreceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    // Toast.makeText(context, "Alarm worked.", Toast.LENGTH_LONG).show();      
    Bundle b = intent.getExtras();
    String showname=b.getString("showname");//This is where I suppose to receive it but its null
    NotificationManager manger = (NotificationManager) context
            .getSystemService(context.NOTIFICATION_SERVICE);

    Notification notification = new Notification(R.drawable.icon,
            "TVGuide Υπενθύμιση", System.currentTimeMillis());
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
            new Intent(context, tvguide.class), 0);

    notification.setLatestEventInfo(context, "Το Πρόγραμμα Ξεκίνησε",
            showname, contentIntent);

    notification.flags = Notification.FLAG_ONLY_ALERT_ONCE;

    notification.sound = Uri.parse("file:///sdcard/dominating.mp3");
    notification.vibrate = new long[]{100, 250, 100, 500};
    manger.notify(1, notification);
}           
}

इरादे को सिस्टम में पुन: उपयोग किया जाता है, जब तक कि वे मेरे द्वारा विश्वास / कार्रवाई पर भिन्न न हों। दस्तावेज़ीकरण लिंक । यही है, अगर आप पहले से ही एक इरादा बना चुके हैं, तो उस उद्देश्य का बाद में भी इस्तेमाल किया जा सकता है।

डीबग-टेस्ट के रूप में, आप intent.setAction("" + Math.random()) intent.putExtras(c) नीचे जोड़ने का प्रयास कर सकते हैं और देख सकते हैं कि आपके अतिरिक्त दूसरे छोर में प्राप्त होते हैं या नहीं।

प्रासंगिक दस्तावेज़ीकरण :

इस व्यवहार के कारण, यह जानना महत्वपूर्ण है कि लंबित इंटेंन्ट को पुनर्प्राप्त करने के प्रयोजनों के लिए दो इरादों को समान माना जाता है। लोगों द्वारा की जाने वाली एक आम गलती कई लंबित इंटेंटेंट ऑब्जेक्ट्स को उन उद्देश्यों के साथ बनाना है जो केवल "अतिरिक्त" सामग्री में भिन्न होती हैं, जो हर बार एक अलग लंबित इंटेन्टेंट प्राप्त करने की अपेक्षा करती हैं। ऐसा नहीं होता है। मिलान के लिए उपयोग किए जाने वाले इरादे के कुछ हिस्सों को Intent.filterEquals द्वारा परिभाषित किया गया है। यदि आप दो इरादों का उपयोग करते हैं जो Intent.filterEquals के बराबर हैं, तो आप दोनों के लिए एक ही लंबित इंटेंट प्राप्त करेंगे।


मुझे एक ही समस्या थी। मैंने इसे @aioobe द्वारा सुझाए गए इरादे पर एक क्रिया स्थापित करने के साथ हल किया, और मेरा इरादा जादू की तरह काम करता है।

यहाँ मैंने क्या किया

  ` intent.putExtra("Name", mName);
    intent.putExtra("dateTime", newdate);
    intent.setAction("" + Math.random());`

उम्मीद है कि यह किसी की मदद करेगा, खुश कोडिंग ..! :)


यदि आप इरादे में अतिरिक्त मूल्य बदलते हैं, तो लंबित इरादे बनाते समय आपको ध्वज लंबित INTent.FLAG_CANCEL_CURRENT का उपयोग करना चाहिए।

एक साधारण उदाहरण होगा

PendingIntent pi = PendingIntent.getBroadcast(context, 0,intentWithNewExtras,PendingIntent.FLAG_CANCEL_CURRENT);

यह सही तरीका है और यह सुनिश्चित करेगा कि आपके नए मूल्य वितरित किए जाएंगे।

आशा करता हूँ की ये काम करेगा।





alarm