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

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

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

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

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

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

للوصول إلى موفِّر الموقع المدمج، يجب أن يتضمّن مشروع تطوير تطبيقك "خدمات Google Play". يمكنك تنزيل مكوّن "خدمات Google Play" وتثبيته من خلال مدير حزمة تطوير البرامج (SDK) وإضافة المكتبة إلى مشروعك. لمعرفة التفاصيل، يُرجى الاطّلاع على دليل إعداد "خدمات 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، يمكنك الاطّلاع على المواد التالية:

نماذج

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