معلق من النزاعات عن الإخطار وتاريخ التطبيق
-
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 لكل إشعار.