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

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

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

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

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

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

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

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

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

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

في طريقة onCreate() لنشاطك، أنشئ مثيلًا لخدمة Fused Location Provider Client كما يوضّح مقتطف الرمز البرمجي التالي.

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، اطّلِع على المواد التالية:

نماذج

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