كيف يمكنني تمرير إضافات فريدة بشكل صحيح إلى نية معلقة؟
-
30-09-2019 - |
سؤال
أواجه مشكلة مع alarmManager
والقصد المعلق مع الإضافات التي ستتوافق معها.
إذا قمت بتعيين أجهزة إنذار متعددة ، فسوف تنفجر ، ولكن الإضافات تبقى كما هي.
لقد قرأت بالفعل في هذه الأسئلة:
- Android في انتظار مشكلة إخطار النية
- يستمر Android في تخزين المؤقتة الخاصة بي ، وكيفية إعلان نية معلقة تحافظ على إضافات جديدة؟
وقد حاولت:
- تعيين معرف فريد لكل نية معلقة و
- باستخدام جميع أعلام النوايا المعلقة ،
كل شيء دون جدوى. ليس لدي أدنى فكرة لماذا لن ينجح.
هنا مقتطف رمز:
Intent intent = new Intent(con,
AppointmentNotificationReciever.class);
intent.putExtra("foo", bar.toString());
int id = randomNum;
PendingIntent sender = PendingIntent.getBroadcast(con, id,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) con.getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, scheduleExecution, sender);
المحلول
ربما اثنين من المسألة المختلفة هنا:
1) إذا كنت قد قمت بالفعل بإنشاء PendingIntent الخاص بك من قبل و "يتطابق" مع PendingIntent موجود ، فيجب عليك تحديد علامة pendingIntent.flag_update_current أو لن تمر بالإضافات. تعتمد "المباراة" على المعايير التي تستخدمها neain.filterequals () ، لذلك بالتأكيد اقرأ المستندات هناك وتأكد من فهم البيانات أو الإجراء والنوع ، إلخ.
2) لقد قرأت أنه إذا لم تقم بتعيين إجراء على نيتك ، فلن تنشر الإضافات ، لذلك ربما حاول intent.setAction ("com.blah.action").
نصائح أخرى
لقد واجهت مشكلة مماثلة. استخدام PenderIntent.flag_one_shot قد يحل المشكلة ، لأنه يعني أن النشاط المعلق لن يتم إعادة استخدامه.
قد يكون هذا بسبب النشاط :: getIntent إعادة النية الأصلية للنشاط بالنظر إلى بعض الأعلام/المرشحات النية.
إذا كان هذا هو الحال بالنسبة لك ، فستحتاج إلى النظر إلى النشاط :: onnewintent. تجاوز هذه الطريقة ، ويجب أن يكون النية التي تم نقلها إلى هذه الوظيفة هي النية الجديدة مع الإضافات المناسبة ، إلخ.
يذهب الائتمان إلى هذا السؤال الذي ساعدني في حل مشكلتي: لماذا هو نية النشاط القابل للبحث. getAction () فارغة؟