سؤال

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

ومع ذلك ، لدي أيضًا خدمة تتطلب الموقع. قد يتم تشغيل الخدمة قبل النشاط ، لذلك لا يمكنني الاعتماد على النشاط للحصول على الموقع (أو لا).

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

  1. جدولة الخدمة مع الإجراء "Get Location" ، الذي يضبط مستمع الموقع ، ينتظر التحديثات ، ويجدول نفس الخدمة يقول بعد 3 دقائق مع "التحديث"
  2. في خدمة "التحديث" ، احصل على آخر موقع معروف ، وكن سعيدًا بذلك. تم الحصول عليه أم لا. إذا كان الأمر فارغًا ، فنحن نعلم أنه ليس لدينا موقع وقمنا ببذل قصارى جهدنا.

يبدو أن هذا سيعمل ، لكنه أصبح معقدًا حيث لم يعد بإمكاني استخدام خدمة النوايا البسيطة (أفترض) ، لأنه إذا توقفت خدمة النوايا عن نفسها بعد onhandleintent () ، فلن يتم استلام الحدث الذي تم تغييره في الموقع.

على أي حال ، أصبح الأمر معقدًا نوعًا ما ، لذلك أتساءل عما إذا كانت هناك طريقة أبسط.

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

المحلول

الإجابة على سؤالي الخاص ... إليك كيف انتهى بي حل هذا ،

addateservice - خدمة النوايا التي تعمل بالفعل على التحديث. هذا واحد فقط يستدعي getLastainkLocation () للحصول على الموقع.

Scationservice - خدمة منتظمة تسجل لتحديثات الموقع ، وتضع أيضًا مؤقتًا للاستيقاظ في دقيقتين. إما أن نحصل على تحديث الموقع ، أو ينفجر المؤقت. إذا حصلنا على تحديث الموقع ، فإننا نلغي المؤقت. في كلتا الحالتين ، نقوم بإلغاء التسجيل لتحديثات الموقع ، وتبدأ التحديثات للقيام بالعمل الفعلي ، ثم توقف عن أنفسنا.

نقوم بجدولة STICATIONS CONSERS كإجراء إنذار متكرر ليكون عملية "خلفيةنا".

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

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