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

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

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

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

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

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

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

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

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

نماذج

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