إنشاء الحدود الجغرافية ومراقبتها

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

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

يشرح هذا الدرس كيفية إضافة الحدود الجغرافية وإزالتها، ثم الاطّلاع على انتقالات الحدود الجغرافية. باستخدام BroadcastReceiver.

ملاحظة: على أجهزة Wear، لا تستفيد واجهات برمجة التطبيقات Geofeence API من القوة. لا ننصح باستخدام واجهات برمجة التطبيقات هذه على أجهزة Wear OS. القراءة الحفاظ على الطاقة والبطارية للحصول على مزيد من المعلومات.

إعداد ميزة تتبُّع الحدود الجغرافية

تتمثل الخطوة الأولى لطلب مراقبة الحدود الجغرافية في طلب الأذونات. لاستخدام وضع حدود جغرافية، يجب أن يطلب تطبيقك ما يلي:

لمزيد من المعلومات، يُرجى الاطّلاع على دليل كيفية طلب أذونات تحديد الموقع الجغرافي

إذا أردت استخدام BroadcastReceiver للاستماع إلى انتقالات الحدود الجغرافية، إضافة عنصر يحدد اسم الخدمة. يجب أن يكون هذا العنصر عنصر ثانوي للعنصر <application>:

<application
   android:allowBackup="true">
   ...
   <receiver android:name=".GeofenceBroadcastReceiver"/>
<application/>

للوصول إلى واجهات برمجة تطبيقات الموقع، عليك إنشاء مثيل تطبيق وضع حدود جغرافية للتعرّف على كيفية ربط عميلك، اتّبِع الخطوات التالية:

Kotlin

lateinit var geofencingClient: GeofencingClient

override fun onCreate(savedInstanceState: Bundle?) {
    // ...
    geofencingClient = LocationServices.getGeofencingClient(this)
}

Java

private GeofencingClient geofencingClient;

@Override
public void onCreate(Bundle savedInstanceState) {
    // ...
    geofencingClient = LocationServices.getGeofencingClient(this);
}

إنشاء حدود جغرافية وإضافتها

يحتاج تطبيقك إلى إنشاء سياجات جغرافية وإضافتها باستخدام فئة أداة إنشاء المواقع الجغرافية في location API. إنشاء كائنات الحدود الجغرافية والفئة المناسبة لإضافتها. أيضًا، للتعامل مع الأهداف التي يتم إرسالها من "خدمات الموقع الجغرافي" عند حدوث انتقالات في الحدود الجغرافية، يمكنك تحديد PendingIntent كما هو موضّح في هذا القسم.

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

إنشاء عناصر السياجات الجغرافية

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

Kotlin

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())

Java

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 المدمجة بها تحديد الحدود الجغرافية المطلوب مراقبتها وضبط كيفية تشغيل أحداث الحدود الجغرافية ذات الصلة:

Kotlin

private fun getGeofencingRequest(): GeofencingRequest {
    return GeofencingRequest.Builder().apply {
        setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER)
        addGeofences(geofenceList)
    }.build()
}

Java

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:

Kotlin

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)
    }
}

Java

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. يوضح المقتطف التالي معالجة النتائج:

Kotlin

geofencingClient?.addGeofences(getGeofencingRequest(), geofencePendingIntent)?.run {
    addOnSuccessListener {
        // Geofences added
        // ...
    }
    addOnFailureListener {
        // Failed to add geofences
        // ...
    }
}

Java

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 تنشر إشعارًا عند حدوث انتقال سياج جغرافي. عندما يجرّب بالنقر على الإشعار، يظهر النشاط الرئيسي للتطبيق:

Kotlin

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))
        }
    }
}

Java

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، مما يؤدي إلى إيقاف كل إشعار إضافي عند دخول الجهاز أو خروجه من الحدود الجغرافية التي تمت إضافتها سابقًا:

Kotlin

geofencingClient?.removeGeofences(geofencePendingIntent)?.run {
    addOnSuccessListener {
        // Geofences removed
        // ...
    }
    addOnFailureListener {
        // Failed to remove geofences
        // ...
    }
}

Java

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 متاحًا (على سبيل المثال، أثناء القيادة في المناطق الريفية) تنخفض دقة الموقع الجغرافي. يمكن أن يصل نطاق الدقة إلى عدة مئات من الأمتار عدة كيلومترات. في مثل هذه الحالات، يجب إنشاء حدود جغرافية باستخدام نصف قطر أكبر.

يُرجى توضيح سبب استخدام تطبيقك لميزة تحديد الموقع الجغرافي.

بما أنّ تطبيقك يصل إلى الموقع الجغرافي في الخلفية عند استخدام ميزة تحديد الموقع الجغرافي، فكِّر في كيفية تقديم تطبيقك للفوائد للمستخدمين. اشرح لهم سبب يحتاج تطبيقك إلى إذن الوصول هذا لزيادة مدى فهم المستخدمين للمتطلبات والشفافية.

لمزيد من المعلومات حول أفضل الممارسات المتعلقة بالوصول إلى الموقع الجغرافي، بما في ذلك وضع حدود جغرافية، راجِع أفضل ممارسات الخصوصية ممارسات Google.

استخدام نوع انتقال الثبات لتقليل التنبيهات غير المرغوب فيها

إذا تلقيت عددًا كبيرًا من التنبيهات عند القيادة عبر سياج جغرافي لفترة وجيزة، فإن أفضل طريقة تقليل التنبيهات هو استخدام نوع انتقال 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. أضفنا إمكانية "فحص شبكات Wi-Fi" بدءًا من Android 4.3 (المستوى 18 من واجهة برمجة التطبيقات) فقط" الذي يسمح للمستخدمين بتعطيل Wi-Fi مع الاستمرار في الحصول على موقع جيد للشبكة. إنها جيدة التدريب من أجل مطالبة المستخدم وتوفير اختصار للمستخدم لتفعيل البحث عن شبكات Wi-Fi أو Wi-Fi فقط إذا كان كلاهما معطلًا. استخدام SettingsClient للتأكّد من ضبط إعدادات نظام الجهاز بشكل صحيح رصد الموقع الجغرافي:

    ملاحظة: إذا كان تطبيقك يستهدف Android 10 (المستوى 29 من واجهة برمجة التطبيقات) أو أعلى، لا يمكنك الاتصال بـ WifiManager.setEnabled() مباشرة ما لم تطبيقك عبارة عن تطبيق نظام أو سياسة جهاز وحدة التحكّم بسياسة الجهاز (DPC). بدلاً من ذلك، استخدم .

  • ليس هناك اتصال شبكة موثوق به داخل حدودك الجغرافية. إذا كان هناك لا يوجد اتصال بيانات موثوق به، فقد لا يتم إنشاء تنبيهات. وذلك لأن خدمة الحدود الجغرافية تعتمد على موفر موقع الشبكة الذي يتطلب بدوره اتصال بيانات.
  • يمكن أن تتأخر التنبيهات. لا تبحث خدمة الحدود الجغرافية باستمرار عن موقعك الجغرافي، لذا توقَّع بعض وقت الاستجابة عند تلقّي التنبيهات. وقت الاستجابة عادةً أقل من 2 أو دقائق أو حتى أثناء حركة الجهاز. في حال حذف الخلفية حدود المواقع الجغرافية سارية، ويتراوح وقت الاستجابة بين دقيقتين و3 دقائق في المتوسط. إذا كان الجهاز ثابتًا لفترة طويلة، سيتم قد يزداد (ما يصل إلى 6 دقائق).

مصادر إضافية

لمعرفة المزيد من المعلومات عن وضع الحدود الجغرافية، يمكنك الاطّلاع على المواد التالية:

نماذج

نموذج تطبيق لإنشاء حدود جغرافية ومراقبتها