حدود المواقع الجغرافية في الخلفية

في محاولة للحد من استهلاك الطاقة، يحد نظام Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات) من عدد المرات التي يمكن فيها للتطبيق استرداد الموقع الجغرافي الحالي للمستخدم أثناء تشغيل التطبيق في الخلفية. في ظل هذه الشروط، لا يمكن للتطبيقات تلقي تحديثات الموقع سوى بضع مرات كل ساعة.

ملاحظة: تنطبق هذه القيود على جميع التطبيقات المستخدَمة على الأجهزة التي تعمل بنظام التشغيل Android 8.0 (مستوى واجهة برمجة التطبيقات 26) أو الإصدارات الأحدث بغض النظر عن إصدار حزمة تطوير البرامج (SDK) الذي يستهدفه التطبيق.

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

يتم الاحتفاظ بسلوك التطبيق الذي تعمل في المقدّمة.

إذا كان هناك تطبيق يعمل في المقدّمة على جهاز يعمل بالإصدار 8.0 من نظام التشغيل Android (المستوى 26 من واجهة برمجة التطبيقات)، سيكون سلوك تعديل الموقع الجغرافي مماثلاً لنظام التشغيل Android 7.1.1 (مستوى واجهة برمجة التطبيقات 25) والإصدارات الأقدم.

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

ضبط سلوك الموقع الجغرافي لتطبيقك

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

  • اعرض تطبيقك في المقدمة.
  • يمكنك بدء خدمة تعمل في المقدّمة في تطبيقك من خلال الاتصال بـ startForegroundService(). عندما تكون هذه الخدمة التي تعمل في المقدّمة نشطة، تظهر كإشعار جارٍ في منطقة الإشعارات.

    تنبيه: إذا كان تطبيقك يشغّل خدمة تعمل في المقدّمة أثناء تشغيله في الخلفية على جهاز يعمل بنظام التشغيل Android 11 (المستوى 30 لواجهة برمجة التطبيقات) أو إصدار أحدث، لن يتمكّن تطبيقك من الوصول إلى معلومات الموقع الجغرافي ما لم يمنح المستخدم إذن ACCESS_BACKGROUND_LOCATION لتطبيقك. لمزيد من المعلومات، يمكنك الاطّلاع على الإرشادات حول القيود أثناء الاستخدام المرتبطة بالخدمات التي تعمل في المقدّمة.

  • استخدام عناصر واجهة برمجة التطبيقات Geofencing API، مثل GeofencingClient، التي تم تحسينها لتقليل استخدام الطاقة.
  • استخدِم أداة معالجة الموقع الجغرافي السلبية، والتي قد تتلقّى تعديلات أسرع للموقع الجغرافي إذا كانت هناك تطبيقات تعمل في المقدّمة تطلب إجراء تعديلات على الموقع الجغرافي بمعدّل أسرع.

ملاحظة: إذا كان تطبيقك يحتاج إلى الوصول إلى سجلّ المواقع الجغرافية الذي يتضمّن تحديثات متكررة للوقت، يمكنك استخدام النسخة المجمّعة من عناصر واجهة برمجة تطبيقات Fused Location Provider API، مثل واجهة FusedLocationProviderApi. عند تشغيل تطبيقك في الخلفية، تتلقّى واجهة برمجة التطبيقات هذه الموقع الجغرافي للمستخدم بشكل أكثر تكرارًا من واجهة برمجة التطبيقات غير المجمّعة. ومع ذلك، ضع في اعتبارك أن تطبيقك لا يزال يتلقى التحديثات على دفعات بضع مرات فقط كل ساعة.

واجهات برمجة التطبيقات المتأثرة

التغييرات التي تطرأ على سلوك استرداد الموقع الجغرافي في تطبيقات الخلفية تؤثر في واجهات برمجة التطبيقات التالية:

موفِّر الموقع المدمج (FLP)
  • إذا كان تطبيقك يعمل في الخلفية، تحتسب خدمة نظام المواقع الجغرافية موقعًا جديدًا للتطبيق بضع مرات فقط كل ساعة. ويسري هذا حتى عندما يطلب تطبيقك تحديثات أكثر تكرارًا للموقع الجغرافي.

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

  • إذا كان تطبيقك يعمل في المقدّمة، لن يحدث أي تغيير في معدّلات أخذ العيّنات من الموقع الجغرافي مقارنةً بالإصدار 7.1.1 من Android (المستوى 25 من واجهة برمجة التطبيقات).
وضع الحدود الجغرافية
  • يمكن أن تتلقّى التطبيقات التي تعمل في الخلفية أحداث نقل حدود جغرافية بشكل متكرر أكثر من التحديثات الواردة من "موفِّر الموقع المدمج".
  • يبلغ متوسط سرعة الاستجابة لحدث وضع حدود جغرافية كل دقيقتين تقريبًا.
قياسات GNSS ورسائل التنقل في GNSS
  • عندما يكون تطبيقك في الخلفية، تتوقّف عمليات معاودة الاتصال التي يتم تسجيلها لتلقّي مخرجات من GnssMeasurement وGnssNavigationMessage.
إدارة المواقع الجغرافية
  • يتم توفير تحديثات الموقع الجغرافي للتطبيقات في الخلفية بضع مرات فقط كل ساعة.

    ملاحظة: إذا كان تطبيقك يعمل على جهاز تم تثبيت خدمات Google Play عليه، ننصحك بشدة باستخدام موفِّر الموقع المدمج (FLP) بدلاً من ذلك.

مدير شبكة Wi-Fi
تُجري طريقة startScan() فحصًا كاملاً للتطبيقات في الخلفية بضع مرات فقط كل ساعة. إذا استدعينا تطبيق الخلفية الطريقة مرة أخرى بعد ذلك بوقت قصير، ستقدّم الفئة WifiManager نتائج مخزّنة مؤقتًا من عملية الفحص السابقة.