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

يوضّح لك هذا الدرس كيفية إضافة حدود جغرافية وإزالتها، ثم الاستماع إلى عمليات الانتقال إلى الحدود الجغرافية
باستخدام BroadcastReceiver
.
ملاحظة: على أجهزة Wear، لا تستخدم واجهات برمجة التطبيقات لميزة "الحدّ من الوصول الجغرافي" الطاقة بكفاءة. لا ننصح باستخدام واجهات برمجة التطبيقات هذه على Wear. اطّلِع على مقالة توفير الطاقة والبطارية للحصول على مزيد من المعلومات.
إعداد ميزة تتبُّع الحدود الجغرافية
الخطوة الأولى لطلب مراقبة حدود المنطقة الجغرافية هي طلب الأذونات اللازمة. لاستخدام ميزة "تقييد الوصول الجغرافي"، يجب أن يطلب تطبيقك ما يلي:
-
ACCESS_FINE_LOCATION
-
ACCESS_BACKGROUND_LOCATION
إذا كان تطبيقك يستهدف Android 10 (المستوى 29 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث
لمزيد من المعلومات، يُرجى الاطّلاع على دليل كيفية طلب أذونات تحديد الموقع الجغرافي
إذا كنت تريد استخدام BroadcastReceiver
للاستماع إلى عمليات النقل في حدود الجغرافية،
أضِف عنصرًا يحدِّد اسم الخدمة. يجب أن يكون هذا العنصر
عنصرًا فرعيًا لعنصر
<application>
:
<application android:allowBackup="true"> ... <receiver android:name=".GeofenceBroadcastReceiver"/> <application/>
للوصول إلى واجهات برمجة تطبيقات الموقع، عليك إنشاء مثيل تطبيق وضع حدود جغرافية للتعرّف على كيفية ربط عميلك، اتّبِع الخطوات التالية:
lateinit var geofencingClient: GeofencingClient override fun onCreate(savedInstanceState: Bundle?) { // ... geofencingClient = LocationServices.getGeofencingClient(this) }
private GeofencingClient geofencingClient; @Override public void onCreate(Bundle savedInstanceState) { // ... geofencingClient = LocationServices.getGeofencingClient(this); }
إنشاء حدود جغرافية وإضافتها
يجب أن ينشئ تطبيقك حدودًا جغرافية ويضيفها باستخدام فئة "أداة الإنشاء" في Location API ل
إنشاء عناصر الحدود الجغرافية، وفئة "السهولة" لإضافتها. أيضًا، للتعامل مع
الأهداف المُرسَلة من "خدمات الموقع الجغرافي" عند حدوث انتقالات في الحدود الجغرافية، يمكنك تحديد
PendingIntent
كما هو موضّح في هذا القسم.
ملاحظة: على الأجهزة المخصّصة لمستخدم واحد، يكون الحدّ الأقصى المسموح به هو 100 حدود جغرافية لكل تطبيق. بالنسبة إلى الأجهزة المخصّصة لعدة مستخدمين، يكون الحدّ الأقصى المسموح به هو 100 حدود جغرافية لكل تطبيق لكل مستخدم على الجهاز.
إنشاء عناصر السياجات الجغرافية
أولاً، استخدِم
Geofence.Builder
لإنشاء حدود جغرافية، مع ضبط نصف القطر والمدة وأنواع التحولات المطلوبة للحدود الجغرافية. على سبيل المثال، لملء عنصر قائمة:
geofenceList.add(Geofence.Builder() // Set the request ID of the geofence. This is a string to identify this // geofence. .setRequestId(entry.key) // Set the circular region of this geofence. .setCircularRegion( entry.value.latitude, entry.value.longitude, Constants.GEOFENCE_RADIUS_IN_METERS ) // Set the expiration duration of the geofence. This geofence gets automatically // removed after this period of time. .setExpirationDuration(Constants.GEOFENCE_EXPIRATION_IN_MILLISECONDS) // Set the transition types of interest. Alerts are only generated for these // transition. We track entry and exit transitions in this sample. .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER or Geofence.GEOFENCE_TRANSITION_EXIT) // Create the geofence. .build())
geofenceList.add(new Geofence.Builder() // Set the request ID of the geofence. This is a string to identify this // geofence. .setRequestId(entry.getKey()) .setCircularRegion( entry.getValue().latitude, entry.getValue().longitude, Constants.GEOFENCE_RADIUS_IN_METERS ) .setExpirationDuration(Constants.GEOFENCE_EXPIRATION_IN_MILLISECONDS) .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER | Geofence.GEOFENCE_TRANSITION_EXIT) .build());
يسحب هذا المثال البيانات من ملف ثابت. من الناحية العملية، قد إنشاء حدود جغرافية بشكل ديناميكي استنادًا إلى الموقع الجغرافي للمستخدم
تحديد الحدود الجغرافية والعوامل المُشغِّلة الأولية
يستخدم المقتطف التالي الفئة
GeofencingRequest
وفئة
GeofencingRequestBuilder
المدمجة بها
تحديد الحدود الجغرافية المطلوب مراقبتها وضبط كيفية تشغيل أحداث الحدود الجغرافية ذات الصلة:
private fun getGeofencingRequest(): GeofencingRequest { return GeofencingRequest.Builder().apply { setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER) addGeofences(geofenceList) }.build() }
private GeofencingRequest getGeofencingRequest() { GeofencingRequest.Builder builder = new GeofencingRequest.Builder(); builder.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER); builder.addGeofences(geofenceList); return builder.build(); }
يوضّح هذا المثال استخدام عنصرَي تشغيل لحدود جغرافية. يتم بدء عملية النقل
GEOFENCE_TRANSITION_ENTER
عندما يدخل جهاز إلى حدود منطقة جغرافية، ويتم بدء عملية النقل
GEOFENCE_TRANSITION_EXIT
عندما يخرج جهاز من حدود منطقة جغرافية. عند تحديد
INITIAL_TRIGGER_ENTER
، يتم إبلاغ "خدمات الموقع" بأنّه يجب تفعيل
GEOFENCE_TRANSITION_ENTER
إذا كان الجهاز داخل السياج الجغرافي.
في كثير من الحالات، قد يكون من الأفضل استخدام
INITIAL_TRIGGER_DWELL
بدلاً من ذلك،
الذي لا يؤدي إلى تشغيل الأحداث إلا عندما يتوقف المستخدم لمدة زمنية محدّدة ضمن حدود جغرافية.
يمكن أن يساعد هذا النهج في تقليل "الرسائل غير المرغوب فيها" الناتجة عن أعداد كبيرة من الإشعارات عندما يدخل
جهاز حدود جغرافية ويخرج منها بشكل مؤقت. من الاستراتيجيات الأخرى للحصول على أفضل النتائج منحدودة جغرافيًا هي ضبط الحد الأدنى للدائرة على 100 متر. ويساعد ذلك في مراعاة دقة الموقع الجغرافي.
من شبكات Wi-Fi النموذجية، كما يساعد على تقليل استهلاك الجهاز للطاقة.
تحديد جهاز استقبال البث لانتقالات الحدود الجغرافية
يمكن لـ Intent
الذي يتم إرساله من "خدمات الموقع الجغرافي" تشغيل إجراءات مختلفة في
في تطبيقك، ولكن يجب ألا تجعله يبدأ نشاطًا أو جزءًا من النشاط، لأن المكونات
يجب أن تظهر فقط استجابةً لإجراء المستخدم. في كثير من الحالات، يُعدّ BroadcastReceiver
طريقة جيدة للتعامل مع عملية العبور في حدود الجغرافية. يتلقّى
BroadcastReceiver
تعديلات عند وقوع حدث، مثل
الدخول إلى حدود جغرافية أو الخروج منها، ويمكنه بدء مهمة
تشغيلها في الخلفية لفترة طويلة.
يوضح المقتطف التالي كيف
لتحديد PendingIntent
الذي يبدأ BroadcastReceiver
:
class MainActivity : AppCompatActivity() { // ... private val geofencePendingIntent: PendingIntent by lazy { val intent = Intent(this, GeofenceBroadcastReceiver::class.java) // We use FLAG_UPDATE_CURRENT so that we get the same pending intent back when calling // addGeofences() and removeGeofences(). PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT) } }
public class MainActivity extends AppCompatActivity { // ... private PendingIntent getGeofencePendingIntent() { // Reuse the PendingIntent if we already have it. if (geofencePendingIntent != null) { return geofencePendingIntent; } Intent intent = new Intent(this, GeofenceBroadcastReceiver.class); // We use FLAG_UPDATE_CURRENT so that we get the same pending intent back when // calling addGeofences() and removeGeofences(). geofencePendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent. FLAG_UPDATE_CURRENT); return geofencePendingIntent; }
إضافة أسوار جغرافية
لإضافة حدود جغرافية، استخدِم الطريقة
.
قدِّم عنصر GeofencingClient.addGeofences()
GeofencingRequest
وPendingIntent
.
يوضح المقتطف التالي معالجة النتائج:
geofencingClient?.addGeofences(getGeofencingRequest(), geofencePendingIntent)?.run { addOnSuccessListener { // Geofences added // ... } addOnFailureListener { // Failed to add geofences // ... } }
geofencingClient.addGeofences(getGeofencingRequest(), getGeofencePendingIntent()) .addOnSuccessListener(this, new OnSuccessListener<Void>() { @Override public void onSuccess(Void aVoid) { // Geofences added // ... } }) .addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Failed to add geofences // ... } });
التعامل مع انتقالات الحدود الجغرافية
عندما تكتشف "خدمات الموقع الجغرافي" أنّ المستخدم قد دخل حدود منطقة جغرافية أو خرج منها، تُرسِل
Intent
الوارد في PendingIntent
الذي أدرجته في طلب إضافة حدود المناطق الجغرافية. جهاز استقبال بث مثل
إشعار من "GeofenceBroadcastReceiver
" أنّه تم استدعاء "Intent
"
يمكننا بعد ذلك الحصول على حدث وضع حدود جغرافية من الغرض، وتحديد نوع انتقالات الحدود الجغرافية،
وتحدد أي من الحدود الجغرافية المحددة تم تشغيلها. يمكن لمستلم البث توجيه أحد التطبيقات لبدء تنفيذ عمل في الخلفية أو إرسال إشعار كإخراج، إذا كان ذلك مطلوبًا.
ملاحظة: في إصدار Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات) والإصدارات الأحدث، إذا كان التطبيق يعمل في الخلفية أثناء مراقبة السياج الجغرافي، فسيعمل الجهاز للاستجابة لأحداث وضع حدود جغرافية كل بضع دقائق. لمعرفة كيفية تكييف تطبيقك على حدود الاستجابة هذه، فاطلع على الخلفية الحدود القصوى للمواقع الجغرافية:
يوضّح المقتطف التالي كيفية تحديد
BroadcastReceiver
الذي ينشر إشعارًا عند حدوث انتقال في حدود الجغرافية. عندما ينقر المستخدم
على الإشعار، يظهر النشاط الرئيسي للتطبيق:
class GeofenceBroadcastReceiver : BroadcastReceiver() { // ... override fun onReceive(context: Context?, intent: Intent?) { val geofencingEvent = GeofencingEvent.fromIntent(intent) if (geofencingEvent.hasError()) { val errorMessage = GeofenceStatusCodes .getStatusCodeString(geofencingEvent.errorCode) Log.e(TAG, errorMessage) return } // Get the transition type. val geofenceTransition = geofencingEvent.geofenceTransition // Test that the reported transition was of interest. if (geofenceTransition == Geofence.GEOFENCE_TRANSITION_ENTER || geofenceTransition == Geofence.GEOFENCE_TRANSITION_EXIT) { // Get the geofences that were triggered. A single event can trigger // multiple geofences. val triggeringGeofences = geofencingEvent.triggeringGeofences // Get the transition details as a String. val geofenceTransitionDetails = getGeofenceTransitionDetails( this, geofenceTransition, triggeringGeofences ) // Send notification and log the transition details. sendNotification(geofenceTransitionDetails) Log.i(TAG, geofenceTransitionDetails) } else { // Log the error. Log.e(TAG, getString(R.string.geofence_transition_invalid_type, geofenceTransition)) } } }
public class GeofenceBroadcastReceiver extends BroadcastReceiver { // ... protected void onReceive(Context context, Intent intent) { GeofencingEvent geofencingEvent = GeofencingEvent.fromIntent(intent); if (geofencingEvent.hasError()) { String errorMessage = GeofenceStatusCodes .getStatusCodeString(geofencingEvent.getErrorCode()); Log.e(TAG, errorMessage); return; } // Get the transition type. int geofenceTransition = geofencingEvent.getGeofenceTransition(); // Test that the reported transition was of interest. if (geofenceTransition == Geofence.GEOFENCE_TRANSITION_ENTER || geofenceTransition == Geofence.GEOFENCE_TRANSITION_EXIT) { // Get the geofences that were triggered. A single event can trigger // multiple geofences. List<Geofence> triggeringGeofences = geofencingEvent.getTriggeringGeofences(); // Get the transition details as a String. String geofenceTransitionDetails = getGeofenceTransitionDetails( this, geofenceTransition, triggeringGeofences ); // Send notification and log the transition details. sendNotification(geofenceTransitionDetails); Log.i(TAG, geofenceTransitionDetails); } else { // Log the error. Log.e(TAG, getString(R.string.geofence_transition_invalid_type, geofenceTransition)); } } }
بعد رصد حدث الانتقال من خلال PendingIntent
،
يحصل BroadcastReceiver
على نوع انتقال السياج الجغرافي ويختبر
ما إذا كان أحد الأحداث التي يستخدمها التطبيق لبدء إعلامات
، إما
GEOFENCE_TRANSITION_ENTER
أو GEOFENCE_TRANSITION_EXIT
في هذه الحالة. بعد ذلك، تُرسِل الخدمة إشعارًا وتُسجِّل تفاصيل عملية النقل.
إيقاف مراقبة حدود المنطقة الجغرافية
يمكن أن يساعد إيقاف ميزة "مراقبة الجغرافية" عندما لا تكون مطلوبة أو مرغوبًا فيها في توفير طاقة
البطارية وعدد دورات وحدة المعالجة المركزية (CPU) على الجهاز. يمكنك إيقاف ميزة تتبُّع الحدود الجغرافية.
في النشاط الرئيسي المستخدَم لإضافة الحدود الجغرافية وإزالتها فإن إزالة السياج الجغرافي يوقفه
فورًا. توفر واجهة برمجة التطبيقات طرقًا
إزالة الحدود الجغرافية إما من خلال معرّفات الطلبات أو عن طريق إزالة الحدود الجغرافية المرتبطة
PendingIntent
يزيل المقتطف التالي الحدود الجغرافية من خلال PendingIntent
، مما يؤدي إلى إيقاف كل
تلقّي إشعار إضافي عند دخول الجهاز أو خروجه من الحدود الجغرافية التي تمت إضافتها سابقًا:
geofencingClient?.removeGeofences(geofencePendingIntent)?.run { addOnSuccessListener { // Geofences removed // ... } addOnFailureListener { // Failed to remove geofences // ... } }
geofencingClient.removeGeofences(getGeofencePendingIntent()) .addOnSuccessListener(this, new OnSuccessListener<Void>() { @Override public void onSuccess(Void aVoid) { // Geofences removed // ... } }) .addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Failed to remove geofences // ... } });
يمكنك الجمع بين ميزة وضع حدود جغرافية والميزات الأخرى التي تستخدِم الموقع الجغرافي، مثل تعديلات الموقع الجغرافي الدورية. لمزيد من المعلومات، اطّلِع على الدروس الأخرى في هذا الصف.
اتّباع أفضل الممارسات لوضع حدود جغرافية
يوضّح هذا القسم اقتراحات لاستخدام وضع حدود جغرافية على الموقع الجغرافي. واجهات برمجة التطبيقات (APIs) لنظام التشغيل Android.
تقليل استهلاك الطاقة
يمكنك استخدام الأساليب التالية لتحسين استهلاك الطاقة في تطبيقاتك التي تستخدم وضع حدود جغرافية:
اضبط سرعة استجابة الإشعارات على قيمة أعلى. يؤدي ذلك إلى تحسين استهلاك الطاقة من خلال زيادة وقت استجابة تنبيهات حدود المنطقة الجغرافية. على سبيل المثال، إذا عيّنت قيمة الاستجابة خمسة دقائق يتحقق تطبيقك من تنبيه الدخول أو الخروج مرة واحدة كل خمس دقائق فقط. ولا يعني ضبط قيم أدنى بالضرورة أنّه سيتم إشعار المستخدمين خلال تلك الفترة الزمنية. (على سبيل المثال، إذا قمت بضبط قيمة 5 ثوان، فقد يستغرق الأمر وقتًا أطول من ذلك لتلقي الإعلان ).
استخدِم نطاقًا جغرافيًا أكبر سياجًا جغرافيًا للمواقع الجغرافية التي يقضي فيها المستخدم وقتًا طويلاً مثل المنزل أو العمل. في حين أن النطاق الجغرافي الأكبر لا يقلل مباشرة استهلاك الطاقة، فإنه يقلل معدّل تكرار فحص التطبيق للدخول أو الخروج، ما يؤدي إلى خفض الطاقة الإجمالية بشكل فعّال استهلاكنا.
اختيار النطاق الأمثل لحدود المنطقة الجغرافية
للحصول على أفضل النتائج، يجب ضبط الحد الأدنى لنصف قطر السياج الجغرافي بين 100 و150 مترًا. عندما تكون شبكة Wi-Fi متاحة، تتراوح دقة الموقع الجغرافي عادةً بين 20 و50 مترًا. عندما يكون تحديد الموقع الجغرافي داخل المباني متاحًا، يمكن أن ينخفض نطاق الدقة إلى 5 أمتار. ما لم تكن تعرف الأماكن الداخلية هذا الموقع الجغرافي متاح داخل الحدود الجغرافية، فيُفترض أن دقة موقع Wi-Fi تتعلق 50 مترًا.
عندما لا يكون الموقع الجغرافي لشبكة Wi-Fi متاحًا (على سبيل المثال، أثناء القيادة في المناطق الريفية) تنخفض دقة الموقع الجغرافي. يمكن أن يصل نطاق الدقة إلى عدة مئات من الأمتار وحتى عدة كيلومترات. في مثل هذه الحالات، عليك إنشاء حدود جغرافية باستخدام دائرة أكبر.
يُرجى توضيح سبب استخدام تطبيقك لميزة تحديد الموقع الجغرافي.
بما أنّ تطبيقك يصل إلى الموقع الجغرافي في الخلفية عند استخدام ميزة وضع حدود جغرافية، عليك التفكير في كيفية تقديم تطبيقك لفوائد للمستخدمين. اشرح لهم سبب يتطلّب تطبيقك الحصول على إذن الوصول هذا لتعزيز فهم المستخدمين وشفافية تطبيقك.
لمزيد من المعلومات حول أفضل الممارسات المتعلّقة بالوصول إلى الموقع الجغرافي، بما في ذلك وضع حدود جغرافية، يُرجى الاطّلاع على صفحة أفضل ممارسات الخصوصية.
استخدام نوع انتقال الإقامة لتقليل التنبيهات غير المرغوب فيها
إذا كنت تتلقّى عددًا كبيرًا من التنبيهات عند القيادة لفترة قصيرة خارج حدود منطقة جغرافية، فإنّ أفضل طريقة لمحاولة
تقليل عدد التنبيهات هي استخدام نوع انتقال
GEOFENCE_TRANSITION_DWELL
بدلاً من
GEOFENCE_TRANSITION_ENTER
. بهذه الطريقة، يتم إرسال تنبيه ساكن المستخدم فقط عند توقُّف المستخدم عن العمل.
داخل سياج جغرافي لفترة زمنية معينة. يمكنك اختيار المدة من خلال ضبط
تأخُّر التصفّح.
إعادة تسجيل الحدود الجغرافية عند الحاجة فقط
يتم الاحتفاظ بحدود الجغرافية المسجّلة في عملية com.google.process.location
التي تملكها
حزمة com.google.android.gms
.
لا يحتاج التطبيق إلى اتخاذ أي إجراء للتعامل مع الأحداث التالية، لأنّ النظام
لاستعادة الحدود الجغرافية بعد هذه الأحداث:
- تمت ترقية خدمات Google Play.
- يوقف النظام "خدمات Google Play" ويعيد تشغيلها بسبب قيود الموارد.
- تعطُّل عملية تحديد الموقع الجغرافي
يجب على التطبيق إعادة تسجيل الحدود الجغرافية إذا كانت لا تزال مطلوبة بعد الأحداث التالية، وذلك لأنّ لا يمكن للنظام استعادة الحدود الجغرافية في الحالات التالية:
- ستتم إعادة تشغيل الجهاز. من المفترض أن يستمع التطبيق إلى إجراء اكتمال تشغيل الجهاز، ثم إعادة تسجيل حدود الجغرافية المطلوبة.
- تم إلغاء تثبيت التطبيق وإعادة تثبيته.
- يتم محو بيانات التطبيق.
- يتم محو بيانات "خدمات Google Play".
- حصل التطبيق على
GEOFENCE_NOT_AVAILABLE
. تنبيه. ويحدث ذلك عادةً بعد إيقاف ميزة "موفِّر الموقع الجغرافي بالاستناد إلى الشبكة" (NLP) في Android.
تحديد المشاكل وحلّها في حدث دخول الحدود الجغرافية
إذا لم يتم تنشيط حدود الجغرافية عندما يدخل الجهاز إلى حدود جغرافية
(لا يتم تنشيط تنبيه
GEOFENCE_TRANSITION_ENTER
)، تأكَّد أولاً من تسجيل حدود الجغرافية
بشكل صحيح كما هو موضّح في هذا الدليل.
في ما يلي بعض الأسباب المحتمَلة لعدم عمل التنبيهات على النحو المتوقّع:
- لا يتوفّر الموقع الجغرافي الدقيق داخل حدود الجغرافية أو حدود الجغرافية محدودة جدًا. في معظم الأجهزة، تستخدم خدمة الحدود الجغرافية الموقع الجغرافي على الشبكة فقط لتحديد الحدود الجغرافية. التشغيل. تستخدم الخدمة هذه الطريقة لأنّ الموقع الجغرافي على الشبكة تستهلك قدرًا أقل بكثير الطاقة، يستغرق الأمر وقتًا أقل للحصول على مواقع منفصلة، والأهم من ذلك أنها متاحة في الداخل.
تم إيقاف شبكة Wi-Fi على الجهاز يمكن أن يؤدي تفعيل شبكة Wi-Fi إلى تحسين كبير دقة الموقع الجغرافي، لذلك في حال إيقاف شبكة Wi-Fi، قد لا يتلقّى تطبيقك مطلقًا تنبيهات بشأن السياجات الجغرافية. بناءً على العديد من الإعدادات، بما في ذلك نصف القطر الجغرافي أو طراز الجهاز إصدار Android. اعتبارًا من Android 4.3 (المستوى 18 لواجهة برمجة التطبيقات)، أضفنا ميزة "وضع فقط فحص شبكة Wi-Fi" الذي يسمح للمستخدمين بإيقاف شبكة Wi-Fi مع مواصلة الحصول على موقع جيد للشبكة. من الممارسات الجيدة طلب تفعيل شبكة Wi-Fi أو وضع "فحص شبكة Wi-Fi فقط" من المستخدم وتوفير اختصار له في حال إيقافهما. استخدام SettingsClient للتأكّد من ضبط إعدادات نظام الجهاز بشكل صحيح رصد الموقع الجغرافي:
ملاحظة: إذا كان تطبيقك يستهدف Android 10 (المستوى 29 من واجهة برمجة التطبيقات) أو أعلى، لا يمكنك الاتصال بـ
WifiManager.setEnabled()
مباشرةً ما لم تطبيقك عبارة عن تطبيق نظام أو سياسة جهاز وحدة التحكّم بسياسة الجهاز (DPC). بدلاً من ذلك، استخدم .- ليس هناك اتصال شبكة موثوق به داخل الحدود الجغرافية. إذا لم يكن هناك اتصال بيانات موثوق، قد لا يتم إنشاء تنبيهات. ويعود السبب في ذلك إلى أنّ خدمة حدود المنطقة الجغرافية تعتمد على مقدّم الموقع الجغرافي للشبكة الذي يتطلّب بدوره اتصالاً بالبيانات.
- قد تتأخر التنبيهات. لا تبحث خدمة حدود المنطقة الجغرافية باستمرار عن الموقع الجغرافي، لذا من المتوقّع حدوث بعض التأخير عند تلقّي التنبيهات. وقت الاستجابة عادةً أقل من 2 أو دقائق أو حتى أثناء حركة الجهاز. في حال حذف الخلفية حدود المواقع الجغرافية سارية، ويتراوح وقت الاستجابة بين دقيقتين و3 دقائق في المتوسط. إذا كان الجهاز ثابتًا لفترة طويلة، سيتم قد يزيد (ما يصل إلى 6 دقائق).
مصادر إضافية
لمزيد من المعلومات عن وضع حدود جغرافية، اطّلِع على المواد التالية:
نماذج
نموذج تطبيق لإنشاء حدود جغرافية ومراقبتها