1. قبل البدء
يمنح نظاما التشغيل Android 10 و11 المستخدمين المزيد من التحكّم في إذن وصول تطبيقاتهم إلى المواقع الجغرافية لأجهزتهم.
عندما يطلب تطبيق يعمل على Android 11 إذن الوصول إلى الموقع الجغرافي، يتوفّر للمستخدمين أربعة خيارات:
- السماح طوال الوقت
- السماح عند استخدام التطبيق فقط (في Android 10)
- مرة واحدة فقط (في Android 11)
- رفض
Android 10

Android 11

في هذا الدرس التطبيقي حول الترميز، ستتعرّف على كيفية تلقّي آخر المعلومات عن الموقع الجغرافي وكيفية إتاحة هذه الميزة على أي إصدار من Android، وخاصةً الإصدارَين 10 و11. في نهاية الدرس العملي، سيكون لديك تطبيق يتّبع أفضل الممارسات الحالية لاسترداد بيانات الموقع الجغرافي.
المتطلبات الأساسية
المهام التي ستنفذها
- اتّبِع أفضل الممارسات المتعلّقة بالموقع الجغرافي في Android.
- التعامل مع أذونات تحديد الموقع الجغرافي في المقدّمة (عندما يطلب المستخدم أن يصل تطبيقك إلى الموقع الجغرافي للجهاز أثناء استخدام التطبيق)
- عدِّل تطبيقًا حاليًا لإتاحة طلب الوصول إلى الموقع الجغرافي من خلال إضافة رمز للاشتراك في الموقع الجغرافي وإلغاء الاشتراك فيه.
- أضِف إلى التطبيق إمكانية العمل على نظامَي التشغيل Android 10 و11 من خلال إضافة منطق للوصول إلى بيانات الموقع الجغرافي في المقدّمة أو أثناء الاستخدام.
المتطلبات
- الإصدار 3.4 أو إصدار أحدث من استوديو Android لتشغيل الرمز
- جهاز أو محاكي يعمل بإصدار معاينة للمطوّرين من نظام التشغيل Android 10 وAndroid 11
2. البدء
استنساخ مستودع مشروع البداية
لمساعدتك على البدء بأسرع ما يمكن، يمكنك الاستفادة من هذا المشروع الأوّلي. إذا كان Git مثبّتًا، يمكنك ببساطة تنفيذ الأمر التالي:
git clone https://github.com/android/codelab-while-in-use-location
يمكنك الانتقال مباشرةً إلى صفحة GitHub.
إذا لم يكن لديك Git، يمكنك الحصول على المشروع كملف ZIP:
استيراد المشروع
افتح "استوديو Android"، واختَر فتح مشروع حالي في "استوديو Android" من شاشة الترحيب، ثم افتح دليل المشروع.
بعد تحميل المشروع، قد يظهر لك أيضًا تنبيه بأنّ Git لا يتتبّع جميع التغييرات المحلية. يمكنك النقر على تجاهل. (لن يتم إرسال أي تغييرات إلى مستودع Git).
في أعلى يمين نافذة المشروع، من المفترض أن يظهر لك ما يشبه الصورة أدناه إذا كنت في طريقة العرض Android. (إذا كنت في طريقة عرض المشروع، عليك توسيع المشروع لرؤية الشيء نفسه).

هناك مجلدان (base وcomplete)، ويُعرف كل منهما باسم "وحدة".
يُرجى العِلم أنّ "استوديو Android" قد يستغرق عدة ثوانٍ لتجميع المشروع في الخلفية للمرة الأولى. خلال هذه الفترة، ستظهر لك الرسالة التالية في شريط الحالة في أسفل "استوديو Android":

انتظِر إلى أن ينتهي "استوديو Android" من فهرسة المشروع وإنشائه قبل إجراء تغييرات على الرمز. سيسمح ذلك لـ استوديو Android بجلب جميع المكوّنات الضرورية.
إذا ظهرت لك رسالة تقول هل تريد إعادة التحميل لتدخل تغييرات اللغة حيز التنفيذ؟ أو رسالة مشابهة، انقر على نعم.
التعرّف على المشروع التجريبي
أنت الآن جاهز لطلب الموقع الجغرافي في التطبيق. استخدِم وحدة base كنقطة بداية. أثناء كل خطوة، أضِف الرمز إلى الوحدة base. عند الانتهاء من هذا الدرس التطبيقي حول الترميز، من المفترض أن يتطابق الرمز البرمجي في الوحدة base مع محتوى الوحدة complete. يمكن استخدام الوحدة complete للتحقّق من عملك أو للرجوع إليها في حال مواجهة أي مشاكل.
تشمل المكوّنات الرئيسية ما يلي:
MainActivity—واجهة المستخدم التي تتيح للمستخدم السماح للتطبيق بالوصول إلى الموقع الجغرافي للجهازLocationService—خدمة تشترك في تغييرات الموقع الجغرافي وتلغي الاشتراك فيها، وتتم ترقيتها إلى خدمة تعمل في المقدّمة (مع إشعار) إذا انتقل المستخدم إلى خارج نشاط التطبيق. يمكنك إضافة رمز الموقع الجغرافي هنا.Util: إضافة وظائف الإضافة للفئةLocationوحفظ الموقع الجغرافي فيSharedPreferences(طبقة البيانات المبسّطة)
إعداد المحاكي
للحصول على معلومات حول إعداد محاكي Android، يُرجى الاطّلاع على التشغيل على محاكي.
تشغيل مشروع البداية
تشغيل تطبيقك
- وصِّل جهاز Android بالكمبيوتر أو ابدأ محاكيًا. (تأكَّد من أنّ الجهاز يعمل بالإصدار 10 أو إصدار أحدث من نظام التشغيل Android).
- في شريط الأدوات، اختَر إعداد
baseمن أداة الاختيار المنسدلة وانقر على تشغيل:

- لاحظ ظهور التطبيق التالي على جهازك:

قد تلاحظ عدم ظهور أي معلومات عن الموقع الجغرافي في شاشة الإخراج. يرجع ذلك إلى أنّك لم تُضِف رمز الموقع الجغرافي بعد.
3- إضافة موقع جغرافي
المفاهيم
يركّز هذا الدرس التطبيقي حول الترميز على كيفية تلقّي إشعارات بشأن الموقع الجغرافي، وتوفير الدعم في النهاية لنظامَي التشغيل Android 10 وAndroid 11.
ومع ذلك، قبل البدء في الترميز، من المنطقي مراجعة الأساسيات.
أنواع أذونات الوصول إلى الموقع الجغرافي
قد تتذكّر الخيارات الأربعة المختلفة للوصول إلى الموقع الجغرافي من بداية هذا الدرس العملي. إليك ما تعنيه هذه الحالات:
- السماح عند استخدام التطبيق فقط
- وهذا الخيار هو الخيار المقترَح لمعظم التطبيقات. تُعرف هذه الطريقة أيضًا باسم الوصول "أثناء الاستخدام" أو "في المقدّمة فقط"، وقد تمت إضافتها في نظام التشغيل Android 10 وتسمح للمطوّرين باسترداد الموقع الجغرافي فقط أثناء استخدام التطبيق بشكل نشط. يُعد التطبيق نشطًا في أيّ من الحالتين التاليتين:
- يكون النشاط مرئيًا.
- يتم تشغيل خدمة تعمل في المقدّمة مع إشعار بنشاط مستمر في الخلفية.
- مرة واحدة فقط
- تمت إضافة هذا الخيار في Android 11، وهو يشبه خيار السماح عند استخدام التطبيق فقط، ولكن لفترة زمنية محدودة. لمزيد من المعلومات، يُرجى الاطّلاع على الأذونات التي تُمنح لمرة واحدة.
- رفض
- يمنع هذا الخيار الوصول إلى معلومات الموقع الجغرافي.
- السماح طوال الوقت
- يسمح هذا الخيار بالوصول إلى الموقع الجغرافي طوال الوقت، ولكنّه يتطلّب الحصول على إذن إضافي في الإصدار 10 من نظام التشغيل Android والإصدارات الأحدث. يجب أيضًا التأكّد من أنّ لديك حالة استخدام صالحة والالتزام بسياسات الموقع الجغرافي. لن نتناول هذا الخيار في هذا الدرس العملي، لأنّه حالة استخدام أقل شيوعًا. ومع ذلك، إذا كانت لديك حالة استخدام صالحة وتريد معرفة كيفية التعامل بشكل صحيح مع ميزة "الموقع الجغرافي طوال الوقت"، بما في ذلك الوصول إلى الموقع الجغرافي في الخلفية، راجِع نموذج LocationUpdatesBackgroundKotlin.
الخدمات والخدمات التي تعمل في المقدّمة والربط
لإتاحة تحديثات الموقع الجغرافي السماح عند استخدام التطبيق فقط بشكل كامل، عليك مراعاة الحالات التي ينتقل فيها المستخدم إلى تطبيق آخر. وإذا أردت مواصلة تلقّي التحديثات في هذه الحالة، عليك إنشاء Service في المقدّمة وربطه Notification.
بالإضافة إلى ذلك، إذا كنت تريد استخدام Service نفسه لطلب تعديلات على الموقع الجغرافي عندما يكون تطبيقك مرئيًا وعندما ينتقل المستخدم إلى تطبيق آخر، عليك ربط/إلغاء ربط Service بعنصر في واجهة المستخدم.
بما أنّ هذا الدرس التطبيقي حول الترميز يركّز فقط على تلقّي تحديثات الموقع الجغرافي، يمكنك العثور على كل الرموز التي تحتاج إليها في الفئة ForegroundOnlyLocationService.kt. يمكنك تصفّح هذا الصف وMainActivity.kt لمعرفة كيفية عملهما معًا.
لمزيد من المعلومات، يُرجى الاطّلاع على نظرة عامة على الخدمات ونظرة عامة على الخدمات المرتبطة.
الأذونات
لتلقّي آخر المعلومات عن الموقع الجغرافي من خلال NETWORK_PROVIDER أو GPS_PROVIDER، يجب طلب إذن المستخدم من خلال إدراج الإذن ACCESS_COARSE_LOCATION أو ACCESS_FINE_LOCATION، على التوالي، في ملف البيان على Android. وبدون هذه الأذونات، لن يتمكّن تطبيقك من طلب الوصول إلى الموقع الجغرافي في وقت التشغيل.
تغطي هذه الأذونات حالتي مرة واحدة فقط والسماح عند استخدام التطبيق فقط عندما يتم استخدام تطبيقك على جهاز يعمل بالإصدار 10 من نظام التشغيل Android أو الإصدارات الأحدث.
الموقع الجغرافي
يمكن لتطبيقك الوصول إلى مجموعة خدمات الموقع الجغرافي المتوافقة من خلال الفئات في حزمة com.google.android.gms.location.
اطّلِع على الفئات الرئيسية:
FusedLocationProviderClient- هذا هو المكوّن المركزي لإطار عمل الموقع الجغرافي. بعد إنشائه، يمكنك استخدامه لطلب تعديلات على الموقع الجغرافي والحصول على آخر موقع جغرافي معروف.
LocationRequest- هذا هو عنصر البيانات الذي يحتوي على مَعلمات جودة الخدمة للطلبات (فواصل التحديث والأولويات والدقة). يتم تمرير هذا المعرّف إلى
FusedLocationProviderClientعند طلب تعديلات على الموقع الجغرافي. LocationCallback- يُستخدَم هذا الإذن لتلقّي إشعارات عند تغيير الموقع الجغرافي للجهاز أو تعذُّر تحديده. يتم تمرير
LocationResultحيث يمكنك الحصول علىLocationلحفظه في قاعدة البيانات.
بعد أن أصبحت لديك فكرة أساسية عمّا ستفعله، ابدأ في كتابة الرمز.
4. إضافة ميزات الموقع الجغرافي
يركّز هذا الدرس التطبيقي حول الترميز على خيار الموقع الجغرافي الأكثر شيوعًا: السماح عند استخدام التطبيق فقط.
لتلقّي آخر المعلومات عن الموقع الجغرافي، يجب أن يتضمّن تطبيقك نشاطًا مرئيًا أو خدمة تعمل في المقدّمة (مع إشعار).
الأذونات
الغرض من هذا الدرس التطبيقي حول الترميز هو توضيح كيفية تلقّي إشعارات بشأن الموقع الجغرافي، وليس كيفية طلب أذونات تحديد الموقع الجغرافي، لذا تمّت كتابة الرمز البرمجي المستند إلى الأذونات مسبقًا. يمكنك تخطّي هذه الخطوة إذا كنت تعرفها.
في ما يلي أبرز الأذونات (لا يلزم اتّخاذ أي إجراء في هذا القسم):
- يُرجى توضيح الإذن الذي تستخدمه في
AndroidManifest.xml. - قبل محاولة الوصول إلى معلومات الموقع الجغرافي، تحقَّق ممّا إذا كان المستخدم قد منح تطبيقك الإذن بذلك. وإذا لم يحصل تطبيقك على الإذن بعد، اطلب الوصول إلى هذه المعلومات.
- التعامل مع خيار إذن المستخدم (يمكنك الاطّلاع على هذا الرمز في
MainActivity.kt).
إذا بحثت عن TODO: Step 1.0, Review Permissions في AndroidManifest.xml أو MainActivity.kt، سيظهر لك كل الرمز المكتوب للأذونات.
لمزيد من المعلومات، يُرجى الاطّلاع على نظرة عامة على الأذونات.
الآن، ابدأ في كتابة بعض الرموز البرمجية الخاصة بالموقع الجغرافي.
مراجعة المتغيرات الرئيسية اللازمة لتعديل الموقع الجغرافي
في الوحدة base، ابحث عن TODO: Step 1.1, Review variables في
ملف ForegroundOnlyLocationService.kt
ليس عليك اتّخاذ أي إجراء في هذه الخطوة. ما عليك سوى مراجعة مجموعة الرموز التالية، بالإضافة إلى التعليقات، لفهم الفئات والمتغيرات الرئيسية التي تستخدمها لتلقّي آخر المعلومات عن الموقع الجغرافي.
// TODO: Step 1.1, Review variables (no changes).
// FusedLocationProviderClient - Main class for receiving location updates.
private lateinit var fusedLocationProviderClient: FusedLocationProviderClient
// LocationRequest - Requirements for the location updates, i.e., how often you
// should receive updates, the priority, etc.
private lateinit var locationRequest: LocationRequest
// LocationCallback - Called when FusedLocationProviderClient has a new Location.
private lateinit var locationCallback: LocationCallback
// Used only for local storage of the last known location. Usually, this would be saved to your
// database, but because this is a simplified sample without a full database, we only need the
// last location to create a Notification if the user navigates away from the app.
private var currentLocation: Location? = null
مراجعة عملية تهيئة FusedLocationProviderClient
في وحدة base، ابحث عن TODO: Step 1.2, Review the FusedLocationProviderClient في الملف ForegroundOnlyLocationService.kt. يجب أن تبدو التعليمات البرمجية على النحو التالي:
// TODO: Step 1.2, Review the FusedLocationProviderClient.
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this)
كما ذكرنا في التعليقات السابقة، هذا هو الصف الرئيسي لتلقّي آخر المعلومات عن الموقع الجغرافي. تمّت تهيئة المتغيّر لك مسبقًا، ولكن من المهم مراجعة الرمز البرمجي لفهم طريقة تهيئته. ستضيف بعض الرموز هنا لاحقًا لطلب آخر المعلومات عن الموقع الجغرافي.
تهيئة LocationRequest
- في وحدة
base، ابحث عنTODO: Step 1.3, Create a LocationRequestفي الملفForegroundOnlyLocationService.kt. - أضِف الرمز التالي بعد التعليق.
يضيف رمز تهيئة LocationRequest معلَمات جودة الخدمة الإضافية التي تحتاج إليها لطلبك (الفواصل الزمنية والحد الأقصى لوقت الانتظار والأولوية).
// TODO: Step 1.3, Create a LocationRequest.
locationRequest = LocationRequest.create().apply {
// Sets the desired interval for active location updates. This interval is inexact. You
// may not receive updates at all if no location sources are available, or you may
// receive them less frequently than requested. You may also receive updates more
// frequently than requested if other applications are requesting location at a more
// frequent interval.
//
// IMPORTANT NOTE: Apps running on Android 8.0 and higher devices (regardless of
// targetSdkVersion) may receive updates less frequently than this interval when the app
// is no longer in the foreground.
interval = TimeUnit.SECONDS.toMillis(60)
// Sets the fastest rate for active location updates. This interval is exact, and your
// application will never receive updates more frequently than this value.
fastestInterval = TimeUnit.SECONDS.toMillis(30)
// Sets the maximum time when batched location updates are delivered. Updates may be
// delivered sooner than this interval.
maxWaitTime = TimeUnit.MINUTES.toMillis(2)
priority = LocationRequest.PRIORITY_HIGH_ACCURACY
}
- اقرأ التعليقات للتعرّف على طريقة عمل كلّ منها.
تهيئة LocationCallback
- في وحدة
base، ابحث عنTODO: Step 1.4, Initialize the LocationCallbackفي الملفForegroundOnlyLocationService.kt. - أضِف الرمز التالي بعد التعليق.
// TODO: Step 1.4, Initialize the LocationCallback.
locationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult) {
super.onLocationResult(locationResult)
// Normally, you want to save a new location to a database. We are simplifying
// things a bit and just saving it as a local variable, as we only need it again
// if a Notification is created (when the user navigates away from app).
currentLocation = locationResult.lastLocation
// Notify our Activity that a new location was added. Again, if this was a
// production app, the Activity would be listening for changes to a database
// with new locations, but we are simplifying things a bit to focus on just
// learning the location side of things.
val intent = Intent(ACTION_FOREGROUND_ONLY_LOCATION_BROADCAST)
intent.putExtra(EXTRA_LOCATION, currentLocation)
LocalBroadcastManager.getInstance(applicationContext).sendBroadcast(intent)
// Updates notification content if this service is running as a foreground
// service.
if (serviceRunningInForeground) {
notificationManager.notify(
NOTIFICATION_ID,
generateNotification(currentLocation))
}
}
}
إنّ LocationCallback الذي تنشئه هنا هو دالة معاودة الاتصال التي ستستدعيها FusedLocationProviderClient عندما يتوفّر إشعار جديد بشأن الموقع الجغرافي.
في دالة معاودة الاتصال، عليك أولاً الحصول على أحدث موقع جغرافي باستخدام العنصر LocationResult. بعد ذلك، عليك إرسال إشعار إلى Activity بالموقع الجغرافي الجديد باستخدام بث محلي (إذا كان نشطًا) أو تعديل Notification إذا كانت هذه الخدمة تعمل كـ Service في المقدّمة.
- اقرأ التعليقات لفهم وظيفة كل جزء.
الاشتراك في إشعارات تغيير الموقع الجغرافي
بعد إعداد كل شيء، عليك إخبار FusedLocationProviderClient بأنّك تريد تلقّي الإشعارات.
- في وحدة
base، ابحث عنStep 1.5, Subscribe to location changesفي الملفForegroundOnlyLocationService.kt. - أضِف الرمز التالي بعد التعليق.
// TODO: Step 1.5, Subscribe to location changes.
fusedLocationProviderClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper())
يتيح طلب requestLocationUpdates() للجهاز FusedLocationProviderClient معرفة أنّك تريد تلقّي آخر المعلومات عن الموقع الجغرافي.
من المحتمل أنّك تعرف LocationRequest وLocationCallback اللذين حدّدتهما سابقًا. تتيح هذه المعلمات FusedLocationProviderClient معرفة معلمات جودة الخدمة لطلبك وما يجب أن يتم استدعاؤه عند توفّر تحديث. أخيرًا، يحدّد العنصر Looper سلسلة التعليمات البرمجية الخاصة بدالة ردّ الاتصال.
قد تلاحظ أيضًا أنّ هذا الرمز مضمّن في عبارة try/catch. تتطلّب هذه الطريقة حظرًا من هذا النوع لأنّ الخطأ SecurityException يحدث عندما لا يكون لدى تطبيقك إذن بالوصول إلى معلومات الموقع الجغرافي.
إلغاء الاشتراك في تلقّي إشعارات بشأن تغييرات الموقع الجغرافي
عندما لا يحتاج التطبيق إلى الوصول إلى معلومات الموقع الجغرافي، من المهم إلغاء الاشتراك في تلقّي آخر المعلومات عن الموقع الجغرافي.
- في وحدة
base، ابحث عنTODO: Step 1.6, Unsubscribe to location changesفي الملفForegroundOnlyLocationService.kt. - أضِف الرمز التالي بعد التعليق.
// TODO: Step 1.6, Unsubscribe to location changes.
val removeTask = fusedLocationProviderClient.removeLocationUpdates(locationCallback)
removeTask.addOnCompleteListener { task ->
if (task.isSuccessful) {
Log.d(TAG, "Location Callback removed.")
stopSelf()
} else {
Log.d(TAG, "Failed to remove Location Callback.")
}
}
تُعدّ طريقة removeLocationUpdates() مهمة لإعلام FusedLocationProviderClient بأنّك لم تعُد تريد تلقّي تحديثات الموقع الجغرافي لجهاز LocationCallback. يقدّم addOnCompleteListener() دالة معاودة الاتصال لإكمال العملية وينفّذ Task.
كما هو الحال مع الخطوة السابقة، ربما لاحظت أنّ هذه التعليمات البرمجية تقع ضمن عبارة try/catch. تتطلّب هذه الطريقة حظرًا من هذا النوع لأنّ الخطأ SecurityException يحدث عندما لا يكون لدى تطبيقك إذن بالوصول إلى معلومات الموقع الجغرافي.
قد تتساءل عن الوقت الذي يتم فيه استدعاء الطرق التي تحتوي على رمز الاشتراك/إلغاء الاشتراك. ويتم تشغيلها في الفئة الرئيسية عندما ينقر المستخدم على الزر. إذا كنت تريد الاطّلاع عليه، يمكنك الانتقال إلى الفئة MainActivity.kt.
تشغيل التطبيق
شغِّل تطبيقك من "استوديو Android" وجرِّب زر مشاركة الموقع الجغرافي.
من المفترض أن تظهر لك معلومات الموقع الجغرافي في شاشة النتائج. هذا تطبيق يعمل بكامل طاقته على Android 9.


5- التوافق مع Android 10
في هذا القسم، ستضيف إمكانية استخدام Android 10.
يتم تلقائيًا إرسال إشعارات بتغييرات الموقع الجغرافي إلى تطبيقك، لذا لن تحتاج إلى بذل الكثير من الجهد.
في الواقع، كل ما عليك فعله هو تحديد أنّ خدمتك التي تعمل في المقدّمة تُستخدَم لأغراض تتعلّق بالموقع الجغرافي.
استهداف حزمة SDK 29
- في وحدة
base، ابحث عنTODO: Step 2.1, Target Android 10 and then Android 11.في الملفbuild.gradle. - أجرِ التغييرات التالية:
- اضبط قيمة
targetSdkVersionعلى29.
يجب أن تبدو التعليمات البرمجية على النحو التالي:
android {
// TODO: Step 2.1, Target Android 10 and then Android 11.
compileSdkVersion 29
defaultConfig {
applicationId "com.example.android.whileinuselocation"
minSdkVersion 26
targetSdkVersion 29
versionCode 1
versionName "1.0"
}
...
}
بعد ذلك، سيُطلب منك مزامنة مشروعك. انقر على المزامنة الآن.

بعد ذلك، يصبح تطبيقك جاهزًا تقريبًا لنظام التشغيل Android 10.
إضافة نوع الخدمة التي تعمل في المقدّمة
في Android 10، عليك تضمين نوع الخدمة التي تعمل في المقدّمة إذا كنت بحاجة إلى إذن الوصول إلى بيانات الموقع الجغرافي أثناء الاستخدام. في حالتك، يتم استخدامها للحصول على معلومات الموقع الجغرافي.
في الوحدة base، ابحث عن TODO: 2.2, Add foreground service type في AndroidManifest.xml وأضِف الرمز التالي إلى العنصر <service>:
android:foregroundServiceType="location"
يجب أن تبدو التعليمات البرمجية على النحو التالي:
<application>
...
<!-- Foreground services in Android 10+ require type. -->
<!-- TODO: 2.2, Add foreground service type. -->
<service
android:name="com.example.android.whileinuselocation.ForegroundOnlyLocationService"
android:enabled="true"
android:exported="false"
android:foregroundServiceType="location" />
</application>
هذا كل شيء! يتوافق تطبيقك مع ميزة تحديد الموقع الجغرافي في Android 10 "أثناء الاستخدام" من خلال اتّباع أفضل الممارسات المتعلّقة بتحديد الموقع الجغرافي في Android.
تشغيل التطبيق
شغِّل تطبيقك من "استوديو Android" وجرِّب زر مشاركة الموقع الجغرافي.
من المفترض أن يعمل كل شيء كما كان من قبل، ولكن الآن يعمل على Android 10. إذا لم تكن قد وافقت على أذونات تحديد المواقع الجغرافية من قبل، من المفترض أن تظهر لك شاشة الأذونات الآن.



6. التوافق مع Android 11
في هذا القسم، يمكنك استهداف الإصدار 11 من نظام التشغيل Android.
لا داعي لإجراء تغييرات على أي ملفات باستثناء ملف build.gradle.
استهداف حزمة تطوير البرامج (SDK) 11
- في الوحدة
base، ابحث عنTODO: Step 2.1, Target SDKفي الملفbuild.gradle. - أجرِ التغييرات التالية:
- من
compileSdkVersionإلى30 - من
targetSdkVersionإلى30
يجب أن تبدو التعليمات البرمجية على النحو التالي:
android {
TODO: Step 2.1, Target Android 10 and then Android 11.
compileSdkVersion 30
defaultConfig {
applicationId "com.example.android.whileinuselocation"
minSdkVersion 26
targetSdkVersion 30
versionCode 1
versionName "1.0"
}
...
}
بعد ذلك، سيُطلب منك مزامنة مشروعك. انقر على المزامنة الآن.

بعد ذلك، يصبح تطبيقك جاهزًا للعمل على Android 11.
تشغيل التطبيق
شغِّل تطبيقك من "استوديو Android" وحاوِل النقر على الزر.
من المفترض أن يعمل كل شيء كما كان من قبل، ولكن على نظام التشغيل Android 11. إذا لم تكن قد وافقت على أذونات تحديد المواقع الجغرافية من قبل، من المفترض أن تظهر لك شاشة الأذونات الآن.


7. استراتيجيات الموقع الجغرافي على Android
من خلال التحقّق من أذونات تحديد الموقع الجغرافي وطلبها بالطرق الموضّحة في هذا الدرس التطبيقي حول الترميز، يمكن لتطبيقك تتبُّع مستوى الوصول إلى الموقع الجغرافي للجهاز بنجاح.
تسرد هذه الصفحة بعض أفضل الممارسات الرئيسية المتعلّقة بأذونات تحديد الموقع الجغرافي. لمزيد من المعلومات حول كيفية الحفاظ على أمان بيانات المستخدمين، يُرجى الاطّلاع على أفضل ممارسات أذونات التطبيقات.
طلب الأذونات اللازمة فقط
لا تطلب الأذونات إلا عند الحاجة إليها. على سبيل المثال:
- لا تطلب إذن تحديد الموقع الجغرافي عند بدء تشغيل التطبيق ما لم يكن ذلك ضروريًا للغاية.
- إذا كان تطبيقك يستهدف الإصدار 10 من نظام التشغيل Android أو إصدارًا أحدث وكان لديك خدمة تعمل في المقدّمة، عليك تقديم بيان عن
foregroundServiceTypeمن"location"في البيان. - لا تطلب أذونات رصد الموقع الجغرافي في الخلفية إلا إذا كان لديك حالة استخدام صالحة كما هو موضّح في مقالة وصول أكثر أمانًا وشفافية إلى بيانات الموقع الجغرافي للمستخدم.
دعم التكيّف مع الإصدارات الأقدم في حال عدم منح الإذن
للحفاظ على تجربة مستخدم جيدة، صمِّم تطبيقك بطريقة تتيح له التعامل بسلاسة مع الحالات التالية:
- لا يمكن لتطبيقك الوصول إلى معلومات الموقع الجغرافي.
- لا يمكن لتطبيقك الوصول إلى معلومات الموقع الجغرافي عند تشغيله في الخلفية.
8. تهانينا
تعرّفت على كيفية تلقّي تحديثات الموقع الجغرافي في Android، مع مراعاة أفضل الممارسات.
مزيد من المعلومات
- نموذج كامل لاستخدام رصد الموقع الجغرافي في الخلفية إذا كانت لديك حالة استخدام صالحة
- طلب تعديلات على الموقع الجغرافي