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

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

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

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

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

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

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

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

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

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

في إجراء onCreate() الخاص بنشاطك، أنشِئ مثيلاً لعميل "موفِّر الموقع المدمج" كما يوضّح مقتطف الرمز التالي.

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، راجع المواد التالية:

نماذج

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