نمط التصميم للعمل البديل إذا كان التطبيق في المقدمة؟

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

  •  20-12-2019
  •  | 
  •  

سؤال

أقوم بإنشاء إجراء يستخدم Google Cloud Messaging لتلقي إشعارات الدفع.

يتضمن ذلك عنصرين بارزين، وهما:

  • أ WakefulBroadcastReceiver لتلقي الرسالة من GCM.
  • ان IntentService ليتم إعلامك عند تلقي حدث GCM.

كما أنا متأكد من أن هذا هو الحال بالنسبة للعديد من التطبيقات، أود أن أتبع نهجًا مختلفًا عندما يكون لدى التطبيق نشاط في المقدمة مقابل نشاط في المقدمة.عندما يفعل التطبيق لا لديك تطبيق في المقدمة.

أرغب في نشر إشعار إلى درج الإشعارات إذا كان التطبيق غير نشط، وببساطة قم بإعادة توجيه الحدث إلى النشاط الأمامي إذا كان التطبيق نشطًا.

هل هناك نمط تصميم لهذا؟كيف يمكنني تحديد ما إذا كان التطبيق في المقدمة أم لا؟الخلفية؟

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

المحلول

يمكنك اتباع النهج كما هو موضح في هذا بلوق وظيفة حيث تقوم بإنشاء BroadcastReceiver في الخاص بك Activity بأولوية موجبة (أي أعلى من القيمة الافتراضية لـ 0) الذي يعترض إجراءً محددًا ثم يستدعيه abortBroadcast - يعالج هذا حالة فتح التطبيق.ثم تقوم أيضًا بالتسجيل أ BroadcastReceiver في البيان الخاص بك والذي يتعامل مع نفس الإجراء ولكن بالأولوية الافتراضية - وهذا هو الإجراء الاحتياطي إذا لم يكن التطبيق مفتوحًا وقام بإنشاء إشعار النظام.

ثم تستخدم sendOrderedBroadcast() لإرسال البث الخاص بك إلى جميع أجهزة الاستقبال المسجلة حسب ترتيب الأولوية.إذا كان النشاط مفتوحا، فإن الأول سوف يتعامل معه.وإلا، فسيتم تعيينه افتراضيًا على الآخر وإنشاء إشعار.

نصائح أخرى

الطريقة التي أقترح القيام بها هي على النحو التالي.

احصل على كل المنطق المتعلق بـ GCM في الخدمة (لم أستخدمه مطلقًا IntentService, ، فلا أعلم عن أحشائها، ولكني أراها ترث من Service).

في نشاطك، ربما لديك طريقة لبدء الخدمة (ربما يقوم المستخدم بتنشيطها من خلال زر)، لا شيء جديد هنا.

هنا يأتي الجزء الممتع.في نشاطك الذي تتعامل معه onPause() و onResume().في onResume() أنت ربط إلى الخدمة.مع آلية الربط يمكنك الحصول على مؤشر لخدمتك وإعلامها بوجودك هناك "يا خدمة أنا نشاط وأنا هنا...يرجى تخزين مؤشر لنفسي في مكان ما"، وتقوم الخدمة بتخزين مؤشر للنشاط (دعنا نسميه mActivity).في الخاص بك onPause() تقوم بإخطار الخدمة التي ستغادرها، وبالتالي يتم ضبط الخدمة mActivity = null, ، ومن ثم انت فك الارتباط من الخدمة.

باستخدام هذه الآلية، في كل مرة تتلقى الخدمة إشعارًا بالدفع، فإنها تختبر mActivity متغير لمعرفة ما إذا كان هناك نشاط مرتبط.باستخدام مؤشر لنشاطك، يمكنك استدعاء أي من أساليبه، وإعادة توجيه المعلومات...

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