معلق من النزاعات عن الإخطار وتاريخ التطبيق

StackOverflow https://stackoverflow.com/questions/2541884

  •  23-09-2019
  •  | 
  •  

سؤال

أقوم بإنشاء إشعار بشيء مشابه لما يلي:

    Intent ni = new Intent(this, SomeActivity.class);
    ni.putExtra("somestring", "somedata");
    PendingIntent contentIntent = 
        PendingIntent.getActivity(this, 0, ni, 
                PendingIntent.FLAG_UPDATE_CURRENT|PendingIntent.FLAG_ONE_SHOT);
    Context context = getApplicationContext();

    notification.setLatestEventInfo(context, 
            res.getString(R.string.app_name), 
            text, contentIntent);

المفتاح هنا هو البيانات الإضافية حول نية الإخطار. بمجرد النقر على الإشعار ويعرض SomeActivity ، فإنه يثير النشاط وتتوفر البيانات الإضافية.

ومع ذلك ، إذا قمت بالخروج من التطبيق ، فأثبت زر الصفحة الرئيسية حتى تظهر قائمة الأنشطة الحديثة ، واخترت فتح التطبيق مرة أخرى ، فلا يزال يتم تمرير البيانات الإضافية. هل هناك طريقة يمكنني من خلالها تمرير هذه البيانات فقط إذا تم فتح التطبيق من خلال الإخطار ، وليس من قائمة الأنشطة الحديثة؟

هل كانت مفيدة؟

المحلول

يبدو أنه يمكنني التحقق لمعرفة ما إذا كان قد تم إطلاق النشاط من مربع الحوار أنشطة حديثة مع هذا:

if((getIntent().getFlags() & 
        Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) {
    // ignore extras
}
else {
    // do not ignore extras
}

لا أعرف ما إذا كانت هذه هي أفضل طريقة ، لكنها تعمل.

نصائح أخرى

استخدم مختلفًا Intent. على سبيل المثال ، يمكنك إضافة ملف <intent-filter> لبعض سلسلة الإجراءات المخصصة ، واستخدم ذلك لك Notification-قائم على PendingIntent. بمعنى آخر ، لا يمكنك تغيير مربع حوار الأنشطة الأكثر اتخاذ قرار ، ولكن يمكنك تغيير جانبك من الصراع.

محاولة مع:

int NOTIFICATION_CODE = 1;

PendingIntent contentIntent = 
          PendingIntent.getActivity(this, 
                                    NOTIFICATION_CODE, 
                                    ni,
                                    PendingIntent.FLAG_UPDATE_CURRENT | 
                                    PendingIntent.FLAG_ONE_SHOT
                                   );

تغيير قيمة الإخطار _code لكل إشعار.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top