मैं कई क्रियाओं के साथ notification बना रहा हूं। मैं broadcast intents का उपयोग कर रहा हूं ताकि यह सूचित किया जा सके कि एक को धक्का दिया गया है और विशिष्ट कार्रवाई की जा रही है। 4 बटन हैं, और मैंने 4 अलग-अलग इरादे बनाए हैं। प्रत्येक में एक ही एक्शन स्ट्रिंग है, लेकिन एक अलग StringExtra

Intent intNow = new Intent(mThis, MyReceiver.class).setAction(actionNotify).putExtra("button", ACT_NOW);
    Intent intEmail = new Intent(mThis, MyReceiver.class).setAction(actionNotify).putExtra("button", ACT_EMAIL);
    Intent intLater = new Intent(mThis, MyReceiver.class).setAction(actionNotify).putExtra("button", ACT_LATER);
    Intent intNever = new Intent(mThis, MyReceiver.class).setAction(actionNotify).putExtra("button", ACT_NEVER);

    Notification.Builder myRatingNotification = new Notification.Builder(mThis)
            .setContentTitle(title)
            .setContentText(text)
            .setSmallIcon(R.mipmap.ic_launcher)
            .addAction(0, mThis.getString(R.string.Rate_Act_Now), PendingIntent.getBroadcast(mThis, 0, intNow, PendingIntent.FLAG_UPDATE_CURRENT))
            .addAction(0, mThis.getString(R.string.Rate_App_Email), PendingIntent.getBroadcast(mThis, 0, intEmail, PendingIntent.FLAG_UPDATE_CURRENT))
            .addAction(0, mThis.getString(R.string.Rate_Act_Later), PendingIntent.getBroadcast(mThis, 0, intLater, PendingIntent.FLAG_UPDATE_CURRENT))
            .addAction(0, mThis.getString(R.string.Rate_Act_Never), PendingIntent.getBroadcast(mThis, 0, intNever, PendingIntent.FLAG_UPDATE_CURRENT))
            .setAutoCancel(true);

    Notification notification = new Notification.BigTextStyle(myRatingNotification).bigText(text).build();
    ((NotificationManager) mThis.getSystemService(Context.NOTIFICATION_SERVICE)).notify(notificationId, notification);

इसलिए अधिसूचना सफलतापूर्वक बनाई गई है। बटन वहीं हैं। लेकिन कोई बात नहीं जो मैं धक्का देता हूं, जो अतिरिक्त receiver पास होता है वह हमेशा अंतिम क्रिया परिभाषित होता है। अर्थात्, ऊपर दिए गए उदाहरण में, प्रत्येक बटन ACT_NEVER के बराबर स्ट्रिंग अतिरिक्त देता है। यदि मैं .addAction को पुनः व्यवस्थित करता हूं, तो इंटलाटर अंतिम है, रिसीवर मुझे बताता है कि स्ट्रिंग एक्स्ट्रा ACT_LATER के बराबर है, कोई फर्क नहीं पड़ता कि मैं किस बटन को धक्का देता हूं।

मैं यह पता नहीं लगा सकता कि क्यों - 4 Intents एक-दूसरे से पूरी तरह स्वतंत्र हैं। क्रियाएँ सही Intent निर्दिष्ट करती हैं। क्या चल रहा है? मैं उलझन में हूं।

7
Scott 21 पद 2015, 05:55

1 उत्तर

सबसे बढ़िया उत्तर
  1. आपको पहले पैरामीटर के रूप में एक आइकन सेट करना चाहिए, न कि 0।
  2. आपका वर्तमान परिणाम क्योंकि आप PendingIntent के निर्माण के लिए एक ही कार्रवाई और एक ही अनुरोधकोड का उपयोग करते हैं, इसलिए 4 PendingIntent समान होगा, और आप PendingIntent.FLAG_UPDATE_CURRENT का उपयोग करते हैं, इसलिए अंतिम PendingIntent का अतिरिक्त पूर्व को बदल देगा।

तो अपनी समस्या को हल करने के लिए, आपको बस चार PendingIntent के लिए अलग requestCode सेट करने की आवश्यकता है, जैसे:

.addAction(0, mThis.getString(R.string.Rate_Act_Now), PendingIntent.getBroadcast(mThis, 0, intNow, PendingIntent.FLAG_UPDATE_CURRENT))
.addAction(0, mThis.getString(R.string.Rate_App_Email), PendingIntent.getBroadcast(mThis, 1, intEmail, PendingIntent.FLAG_UPDATE_CURRENT))
.addAction(0, mThis.getString(R.string.Rate_Act_Later), PendingIntent.getBroadcast(mThis, 2, intLater, PendingIntent.FLAG_UPDATE_CURRENT))
.addAction(0, mThis.getString(R.string.Rate_Act_Never), PendingIntent.getBroadcast(mThis, 3, intNever, PendingIntent.FLAG_UPDATE_CURRENT))
17
starkshang 21 पद 2015, 03:57