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

باستخدام واجهات برمجة التطبيقات للمواقع الجغرافية في "خدمات 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، يمكنك عرض المواد التالية:

العيّنات

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