android - एंड्रॉइड अधिसूचना लंबित इंटेंट एक्स्ट्रा नल




android-intent bundle (3)

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

अधिसूचना के लिए कोड है:

private void showNotification() {
Intent resultIntent = new Intent(this, MainActivity.class);
if (D)
    Log.d(TAG, "Id: " + Id);
resultIntent.putExtra("ineedid", deviceId);

TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(MeterActivity.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0,
    PendingIntent.FLAG_UPDATE_CURRENT);
// Bundle tmp = resultIntent.getExtras();
// if (tmp == null) {
// Log.d(TAG, "tmp bundle is null");
// } else {
// long id = tmp.getLong("ineedid", -1);
// Log.d(TAG, "tmp id : " + id);
// }
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
    BLEMessengerService.this)
    .setSmallIcon(R.drawable.ic_action_search)
    .setContentTitle("Event tracker")
    .setContentText("Events received").setOngoing(true)
    .setContentIntent(resultPendingIntent)
    .setWhen(System.currentTimeMillis());

int mId = R.string.service_notification_start_service;
mNM.notify(mId, mBuilder.getNotification());
}

मुख्य गतिविधि में इरादे से जानकारी प्राप्त करने के लिए कोड;

Bundle extras = getIntent().getExtras();
if (extras != null) {
    long deviceID = getIntent().getLongExtra("ineedid",
        -1);
    if (ID == -1) {
    if (D)
        Log.i(TAG_D, "Wrong Id received.");
    finish();
    } else {
    device = dataSource.getDeviceByID(deviceID);
    if (D)
        Log.i(TAG_D, "Get the id.");
    }
} else {
    if (D)
    Log.d(TAG_D, "Bundle is null");
    finish();
}

अधिसूचना अधिसूचित होने से पहले मैंने सत्यापित किया है, बंडल शून्य नहीं है, और इसमें अतिरिक्त आईडी है। जबकि, जब मैंने इसे मंशा से लाने की कोशिश की, तो यह चला गया। मदद।


मुझे अभी जवाब मिला है, लाइन जोड़ें: resultIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

नोटिस: यदि आप इसे resultIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); रूप में resultIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); यह काम नहीं करेगा।

मैंने अन्य ध्वज जैसे "FLAG_ACTIVITY_NEW_TASK" और "FLAG_ACTIVITY_RESET_TASK_IF_NEEDED" की भी कोशिश की। न तो यहां काम करता है।


मेरे लिए, Intent.FLAG_ACTIVITY_SINGLE_TOP सेट करने के अलावा, मुझे इरादे में एक अनूठी कार्रवाई जोड़नी पड़ी:

    Intent resultIntent = new Intent(caller, NotificationActivity.class);

    String xId = getNextUniqueId();
    resultIntent.putExtra("x_id", xId);
    resultIntent.setAction(xId);
    resultIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

.. सेटएक्शन (..) के बिना, एक्स्ट्रा मेरी अधिसूचना सक्रियता द्वारा प्राप्त इरादे पर शून्य है।

यह पोस्ट इसे समझाने में सहायता करती है: https://.com/a/3128271/2162226


लंबित में इस ध्वज का उपयोग PendingIntent.FLAG_UPDATE_CURRENT यह मेरे लिए काम है

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);




android-pendingintent