الحصول على آخر موقع جغرافي معروف

باستخدام واجهات برمجة التطبيقات للموقع الجغرافي في "خدمات Google Play"، يمكن لتطبيقك طلب آخر موقع جغرافي معروف لجهاز المستخدم. وفي معظم الحالات، تكون مهتمًا بالموقع الجغرافي الحالي للمستخدم، والذي يعادل عادةً آخر موقع جغرافي معروف للجهاز.

وعلى وجه التحديد، يمكنك استخدام موفِّر الموقع المدمج لاسترداد آخر موقع جغرافي معروف للجهاز. موفِّر الموقع الجغرافي المدمج هو إحدى واجهات برمجة التطبيقات للمواقع الجغرافية في "خدمات Google Play". ويدير النظام تكنولوجيا الموقع الجغرافي الأساسية ويوفّر واجهة برمجة تطبيقات بسيطة تتيح لك تحديد المتطلبات على مستوى عالٍ، مثل الدقة العالية أو الطاقة المنخفضة. وتحسِّن أيضًا استخدام الجهاز لطاقة البطارية.

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

يوضّح لك هذا الدرس كيفية تقديم طلب واحد للموقع الجغرافي لجهاز باستخدام طريقة getLastLocation() في موفِّر الموقع الجغرافي المدمج.

إعداد "خدمات Google Play"

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

تحديد أذونات التطبيقات

يجب على التطبيقات التي تستخدم ميزاتها خدمات الموقع الجغرافي طلب أذونات تحديد الموقع الجغرافي، بناءً على حالات استخدام هذه الميزات.

إنشاء عميل خدمات الموقع الجغرافي

في طريقة onCreate() لنشاطك، أنشِئ مثيلاً من "عميل Fused Location Provider" على النحو المعروض في مقتطف الرمز التالي.

Kotlin

private lateinit var fusedLocationClient: FusedLocationProviderClient

override fun onCreate(savedInstanceState: Bundle?) {
    // ...

    fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
}

Java

private FusedLocationProviderClient fusedLocationClient;

// ..

@Override
protected void onCreate(Bundle savedInstanceState) {
    // ...

    fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
}

الحصول على آخر موقع جغرافي معروف

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

لطلب آخر موقع جغرافي معروف، يمكنك استدعاء طريقة getLastLocation(). يوضِّح مقتطف الرمز التالي الطلب وطريقة بسيطة للتعامل مع الردّ:

Kotlin

fusedLocationClient.lastLocation
        .addOnSuccessListener { location : Location? ->
            // Got last known location. In some rare situations this can be null.
        }

Java

fusedLocationClient.getLastLocation()
        .addOnSuccessListener(this, new OnSuccessListener<Location>() {
            @Override
            public void onSuccess(Location location) {
                // Got last known location. In some rare situations this can be null.
                if (location != null) {
                    // Logic to handle location object
                }
            }
        });

تعرض الطريقة getLastLocation() عنصر Task يمكنك استخدامه للحصول على عنصر Location يتضمّن إحداثيات خطي الطول والعرض لموقع جغرافي. قد يكون عنصر الموقع الجغرافي null في الحالات التالية:

  • تمّ إيقاف خدمة الموقع الجغرافي في إعدادات الجهاز. قد تكون النتيجة null حتى إذا سبق أن تم استرداد آخر موقع جغرافي، لأنّ إيقاف الموقع الجغرافي يؤدي أيضًا إلى محو ذاكرة التخزين المؤقت.
  • لم يسجِّل الجهاز موقعه الجغرافي مطلقًا، وقد يكون ذلك في حالة جهاز جديد أو جهاز تمت استعادته إلى إعدادات المصنع.
  • تمت إعادة تشغيل "خدمات Google Play" على الجهاز، وليس هناك عميل "موفِّر الموقع المدمج" نشط يطلب الوصول إلى الموقع الجغرافي بعد إعادة تشغيل الخدمات. لتجنُّب هذا الموقف، يمكنك إنشاء عميل جديد وطلب تعديلات الموقع الجغرافي بنفسك. لمزيد من المعلومات، يُرجى الاطّلاع على تلقّي تعديلات المواقع الجغرافية.

اختيار أفضل تقدير للموقع الجغرافي

توفّر FusedLocationProviderClient عدة طرق لاسترداد معلومات الموقع الجغرافي للجهاز. اختَر أحد الخيارات التالية وفقًا لحالة استخدام تطبيقك:

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

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

مراجع إضافية

لمزيد من المعلومات حول جلب الموقع الحالي في Android، يمكنك عرض المواد التالية:

العيّنات

  • نموذج تطبيق لتوضيح أفضل الممارسات أثناء جلب الموقع الجغرافي الحالي.