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

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

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

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

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

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

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

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

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

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

في طريقة onCreate() الخاصة بنشاطك، أنشئ مثيلاً من FusedLocationProviderClient كما يوضّح مقتطف الرمز التالي.

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);
}

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

بعد إنشاء برنامج Location Services، يمكنك الحصول على آخر موقع جغرافي معروف لجهاز أحد المستخدمين. عندما يكون تطبيقك متصلاً بهذه الخدمات، يمكنك استخدام طريقة 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، اطّلِع على المواد التالية:

نماذج

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