1. قبل البدء
يمنح Android 10 وAndroid 11 للمستخدمين مزيدًا من التحكُّم في تطبيقاتهم حق الوصول إلى مواقع أجهزتهم.
عندما يطلب أحد التطبيقات التي تعمل بنظام التشغيل Android 11 الوصول إلى الموقع الجغرافي، يكون لدى المستخدمين أربعة خيارات:
- السماح طوال الوقت
- السماح عند استخدام التطبيق فقط (في Android 10)
- مرة واحدة فقط (في نظام Android 11)
- رفض
Android 10
Android 11
في هذا الدرس التطبيقي حول الترميز، ستتعلّم كيفية تلقّي آخر المعلومات حول الموقع الجغرافي وطريقة إتاحة الموقع الجغرافي على أي من إصدارات Android، لا سيّما Android 10 و11. في نهاية الدرس التطبيقي حول الترميز، من المتوقَّع أن يكون لديك تطبيق يتّبع أفضل الممارسات الحالية لاسترداد تحديثات الموقع الجغرافي.
المتطلبات الأساسية
الأنشطة
- اتّبِع أفضل الممارسات المتعلقة بالموقع الجغرافي في Android.
- التعامل مع أذونات تحديد الموقع الجغرافي في المقدّمة (عندما يطلب المستخدم وصول تطبيقك إلى الموقع الجغرافي للجهاز عندما يكون التطبيق قيد الاستخدام)
- يمكنك تعديل تطبيق حالي لإضافة إمكانية طلب الوصول إلى الموقع الجغرافي من خلال إضافة رمز للاشتراك وإلغاء الاشتراك فيه.
- يمكنك إضافة دعم إلى تطبيق Android 10 وAndroid 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 ويسمح للمطوّرين باسترداد الموقع الجغرافي فقط أثناء استخدام التطبيق بشكل نشط. يُعتبَر التطبيق نشطًا في حال استيفاء أيّ من المتطلّبات التالية:
- النشاط مرئي.
- إحدى الخدمات التي تعمل في المقدّمة تعمل مع إشعار مستمر.
- مرة واحدة فقط
- تتم إضافة هذه السمة في الإصدار 11 من نظام التشغيل Android، وهي مماثلة للخيار السماح عند استخدام التطبيق فقط، ولكن لفترة محدودة. لمزيد من المعلومات، يُرجى الاطّلاع على الأذونات لمرة واحدة.
- رفض
- يمنع هذا الخيار الوصول إلى معلومات الموقع الجغرافي.
- السماح طوال الوقت
- يتيح هذا الخيار الوصول إلى الموقع الجغرافي طوال الوقت، ولكنّه يتطلّب إذنًا إضافيًا لنظام Android 10 والإصدارات الأحدث. عليك أيضًا التأكّد من أن لديك حالة استخدام صالحة والتزامك بما ورد في سياسات المواقع الجغرافية. لن تتحدّث عن هذا الخيار في هذا الدرس التطبيقي حول الترميز، لأنّه حالة استخدام نادرة. ومع ذلك، إذا كانت لديك حالة استخدام صالحة وتريد التعرّف على كيفية التعامل مع الموقع الجغرافي طوال الوقت بشكل صحيح، بما في ذلك الوصول إلى الموقع الجغرافي في الخلفية، يمكنك مراجعة نموذج 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)
وكما ذكرنا في التعليقات السابقة، هذا هو الصف الأساسي للحصول على تحديثات المواقع الجغرافية. تم إعداد المتغير بالفعل لك، ولكن من المهم مراجعة التعليمة البرمجية لفهم كيفية إعداده. يمكنك إضافة بعض الرموز هنا لاحقًا لطلب تعديلات على الموقع الجغرافي.
إعداد طلب الموقع الجغرافي
- في وحدة
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
في هذا القسم، تستهدف Android 11.
خبر سارّ: ليس عليك إجراء تغييرات على أي ملفات باستثناء ملف 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، مع أخذ أفضل الممارسات في الاعتبار.
مزيد من المعلومات
- النموذج الكامل لاستخدام الموقع الجغرافي في الخلفية إذا كانت لديك حالة استخدام صالحة
- طلب تحديثات الموقع الجغرافي