تحسين استخدام الموقع الجغرافي في سيناريوهات واقعية

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

التحديثات المرئية للمستخدم أو في المقدّمة

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

استخدِم الطريقة setPriority() مع القيمة PRIORITY_HIGH_ACCURACY أو PRIORITY_BALANCED_POWER_ACCURACY.

تعتمد الفترة المحدّدة في طريقة setIntervalMillis() على حالة الاستخدام: بالنسبة إلى السيناريوهات في الوقت الفعلي، اضبط القيمة على بضع ثوانٍ، وإلا اضبطها على بضع دقائق (يُنصح بضبطها على دقيقتين تقريبًا أو أكثر لتقليل استهلاك البطارية).

معرفة الموقع الجغرافي للجهاز

مثال: يريد تطبيق طقس معرفة الموقع الجغرافي للجهاز.

استخدِم طريقة getLastLocation() التي تعرض آخر موقع جغرافي متاح (قد يكون فارغًا في حالات نادرة). توفّر هذه الطريقة وسيلة مباشرة للحصول على الموقع الجغرافي ولا تتطلّب أي تكاليف مرتبطة بطلب تحديثات الموقع الجغرافي بشكل نشط. يمكنك استخدامها مع طريقة isLocationAvailable() التي تعرض القيمة true عندما يكون الموقع الجغرافي الذي تعرضه طريقة getLastLocation() حديثًا إلى حدّ معقول.

بدء التحديثات عندما يكون المستخدم في موقع جغرافي معيّن

مثال: طلب آخر المعلومات عندما يكون المستخدم على مسافة معيّنة من العمل أو المنزل أو موقع جغرافي آخر

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

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

بدء التحديثات استنادًا إلى حالة نشاط المستخدم

مثال: طلب التحديثات فقط عندما يقود المستخدم سيارة أو دراجة.

استخدِم Activity Recognition API مع تحديثات موفِّر الموقع المدمج. اطلب التحديثات عند رصد النشاط المستهدَف، وأزِل التحديثات عندما يتوقف المستخدم عن تنفيذ هذا النشاط.

قد يتضمّن سير العمل المعتاد لحالة الاستخدام هذه عرض إشعار للنشاط الذي تم رصده، وبدء نشاط يحتوي على رمز لطلب التعديلات عندما ينقر المستخدم على الإشعار.

الإشعارات بشأن رصد الموقع الجغرافي في الخلفية لفترة طويلة والمرتبطة بمناطق جغرافية

مثال: يريد المستخدم أن يتم إعلامه عندما يكون الجهاز بالقرب من بائع تجزئة.

هذه حالة استخدام ممتازة للحدود الجغرافية. بما أنّ حالة الاستخدام تتضمّن بالتأكيد رصد الموقع الجغرافي في الخلفية، استخدِم طريقة addGeofences(GeofencingRequest, PendingIntent).

يجب ضبط خيارات الإعداد التالية:

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

  • استخدِم setNotificationResponsiveness()، مع ضبط القيمة على خمس دقائق تقريبًا. ومع ذلك، ننصحك باستخدام قيمة تبلغ عشر دقائق تقريبًا إذا كان بإمكان تطبيقك إدارة التأخير الإضافي في الاستجابة.

يمكن للتطبيق تسجيل 100 حدود جغرافية كحدّ أقصى في المرة الواحدة. في حالة استخدام يريد فيها أحد التطبيقات تتبُّع عدد كبير من خيارات بائعي التجزئة، قد يريد التطبيق تسجيل حدود جغرافية كبيرة (على مستوى المدينة) وتسجيل حدود جغرافية أصغر ديناميكيًا (للمواقع الجغرافية داخل المدينة) للمتاجر داخل الحدود الجغرافية الأكبر. عندما يدخل المستخدم حدودًا جغرافية كبيرة، أضِف حدودًا جغرافية أصغر، وعندما يخرج المستخدم من الحدود الجغرافية الأكبر، أزِل الحدود الجغرافية الأصغر وأعِد تسجيل الحدود الجغرافية لمنطقة جديدة.

تحديثات الموقع الجغرافي في الخلفية التي تستغرق وقتًا طويلاً بدون ظهور مكوّن التطبيق

مثال: تطبيق يتتبّع الموقع الجغرافي بشكل سلبي

استخدِم طريقة setPriority() مع خيار PRIORITY_PASSIVE إن أمكن، لأنّها لا تؤدي إلى استنزاف البطارية تقريبًا. إذا لم يكن استخدام PRIORITY_PASSIVE ممكنًا، استخدِم PRIORITY_BALANCED_POWER_ACCURACY أو PRIORITY_LOW_POWER، ولكن تجنَّب استخدام PRIORITY_HIGH_ACCURACY للعمل المستمر في الخلفية لأنّ هذا الخيار يستنزف البطارية بشكل كبير.

إذا كنت بحاجة إلى المزيد من بيانات الموقع الجغرافي، استخدِم الموقع الجغرافي السلبي من خلال استدعاء الطريقة setMinUpdateIntervalMillis() مع تمرير قيمة أصغر من القيمة التي تمرّرها إلى setIntervalMillis(). عند دمج هذا الخيار مع خيار PRIORITY_PASSIVE، يمكن للموقع الجغرافي السلبي أن يوفّر بشكل انتهازي الموقع الجغرافي الذي تحتسبه التطبيقات الأخرى بدون أي تكلفة إضافية.

يمكنك تخفيف معدّل تكرار الطلبات من خلال إضافة بعض وقت الاستجابة باستخدام الطريقة setMaxUpdateDelayMillis(). على سبيل المثال، إذا كنت تستخدم طريقة setIntervalMillis() بقيمة تبلغ 10 دقائق تقريبًا، عليك استدعاء setMaxUpdateDelayMillis() بقيمة تتراوح بين 30 و60 دقيقة. باستخدام هذه الخيارات، يتم احتساب الموقع الجغرافي لتطبيقك كل 10 دقائق تقريبًا، ولكن لا يتم تنشيط التطبيق إلا كل 30 إلى 60 دقيقة مع توفّر بعض بيانات الموقع الجغرافي كتعديلات مجمَّعة. يؤدي هذا النهج إلى زيادة وقت الاستجابة مقابل توفير المزيد من البيانات وتحسين أداء البطارية.

تحديثات متكررة بدقة عالية أثناء تفاعل المستخدم مع تطبيقات أخرى

مثال: تطبيق للتنقّل أو تطبيق لياقة بدنية يستمر في العمل عندما يغلق المستخدم الشاشة أو يفتح تطبيقًا آخر.

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