تغيير إعدادات الموقع الجغرافي

إذا كان تطبيقك يحتاج إلى طلب الوصول إلى الموقع الجغرافي أو تلقّي إشعارات بشأن الأذونات، سيتم تغيير يحتاج الجهاز إلى تفعيل إعدادات النظام المناسبة، مثل GPS أو Wi-Fi مسح ضوئي. بدلاً من تمكين الخدمات مثل نظام تحديد المواقع العالمي (GPS) للجهاز بشكل مباشر، يحدِّد تطبيقك المستوى المطلوب من الدقة/استهلاك الطاقة الفاصل الزمني للتحديث المطلوب، وسيعمل الجهاز تلقائيًا على إجراء التغييرات التي تطرأ على إعدادات النظام. يتم تحديد هذه الإعدادات من خلال LocationRequest كائن البيانات.

يشرح لك هذا الدرس كيفية استخدام برنامج الإعدادات للتحقق من الإعدادات المفعَّلة، وتقديم إعدادات الموقع مربع حوار للمستخدم تعديل إعداداته بنقرة واحدة.

إعداد خدمات الموقع الجغرافي

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

يجب على التطبيقات التي تستخدم ميزاتها خدمات الموقع الجغرافي طلب أذونات تحديد الموقع الجغرافي اعتمادًا على حالات استخدام تلك الميزات.

إعداد طلب موقع جغرافي

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

الفاصل الزمني للتعديل
setInterval() - تحدد هذه الطريقة المعدل بالملي ثانية الذي يفضل فيه تطبيقك تلقّي تحديثات الموقع الجغرافي يُرجى ملاحظة أنّ تعديلات الموقع الجغرافي قد تكون مختلفة إلى حدّ ما أسرع أو أبطأ من هذا المعدل لتحسين استخدام البطارية، أو قد تكون هناك أن لا يكون هناك تحديثات على الإطلاق (في حال عدم اتصال الجهاز بالإنترنت مثلاً).
الفاصل الزمني الأسرع للتحديث
setFastestInterval() - تحدد هذه الطريقة المعدل الأسرع بالمللي ثانية في التي يمكن لتطبيقك معالجة تحديثات الموقع الجغرافي عليها. ما لم يستفيد تطبيقك من تلقّي آخر الأخبار بسرعة أكبر من المعدّل المحدَّد في setInterval()، لست بحاجة إلى استدعاء هذه الطريقة.
درجة الأهمية

setPriority() - تحدد هذه الطريقة أولوية الطلب، والتي تمنح Google Play خدمات الموقع الجغرافي تلميحًا قويًا عن مصادر المواقع التي يجب استخدامها. في ما يلي القيم المسموح بها:

  • PRIORITY_BALANCED_POWER_ACCURACY - استخدم هذا الإعداد لطلب دقة الموقع داخل المدينة بمسافة 100 متر تقريبًا. هذا هو مستوى تقريبي من الدقة، ومن المرجح أن يستهلك بيانات أقل القوة. من خلال هذا الإعداد، من المرجح أن تستخدم خدمات الموقع الجغرافي شبكة Wi-Fi وتحديد موقع برج الاتصالات. ولكن لاحظ أن اختيار الموقع على العديد من العوامل الأخرى، مثل المصادر المتوفرة.
  • PRIORITY_HIGH_ACCURACY - استخدِم هذا الإعداد لطلب الموقع الجغرافي بأعلى دقة ممكنة. مع لهذا الإعداد، فمن المرجح أن تستخدم خدمات الموقع نظام تحديد المواقع العالمي (GPS) لتحديد الموقع.
  • PRIORITY_LOW_POWER - استخدم هذا الإعداد لطلب الدقة على مستوى المدينة، والتي دقة تصل إلى 10 كيلومتر تقريبًا. يعد ذلك مستوى تقريبي من الدقة، ومن المرجح أن يستهلك طاقة أقل.
  • PRIORITY_NO_POWER - استخدم هذا الإعداد إذا كنت بحاجة إلى تأثير ضئيل على استهلاك الطاقة ولكن تريد تلقّي تحديثات الموقع الجغرافي عندما يكون ذلك متاحًا. مع هذا الميزة، لا يجري تطبيقك أي تعديلات على الموقع الجغرافي، يتلقى المواقع التي تم تشغيلها بواسطة تطبيقات أخرى.

أنشِئ طلب الموقع الجغرافي واضبُط المعلمات كما هو موضح في هذا نموذج التعليمات البرمجية:

Kotlin

fun createLocationRequest() {
  val locationRequest = LocationRequest.Builder()
      .setIntervalMillis(10000)
      .setFastestIntervalMillis(5000)
      .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
      .build()
}

Java

protected void createLocationRequest() {
  LocationRequest locationRequest = LocationRequest.Builder()
      .setIntervalMillis(10000)
      .setFastestIntervalMillis(5000)
      .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
      .build();
}

أولوية PRIORITY_HIGH_ACCURACY، إلى جانب ACCESS_FINE_LOCATION إعداد الأذونات الذي حدّدته في بيان التطبيق، بالإضافة إلى تحديث سريع فاصل مدته 5000 ملي ثانية (5 ثوانٍ)، يتسبب في وجود الموقع المصهر لمزود الخدمة لإرجاع تحديثات الموقع التي تكون دقيقة في نطاق مسافة قليلة. هذا الأسلوب مناسب لتعيين التطبيقات التي تعرض الموقع في الوقت الفعلي.

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

الحصول على إعدادات الموقع الجغرافي الحالية

بعد الاتصال بخدمات Google Play وخدمات الموقع الجغرافي يمكنك الحصول على إعدادات الموقع الجغرافي الحالية لجهاز المستخدم. للقيام بذلك، هذا، قم بإنشاء LocationSettingsRequest.Builder، وإضافة طلب موقع جغرافي واحد أو أكثر يوضح مقتطف الرمز التالي كيفية لإضافة طلب الموقع الذي تم إنشاؤه في الخطوة السابقة:

Kotlin

val builder = LocationSettingsRequest.Builder()
        .addLocationRequest(locationRequest)

Java

LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
     .addLocationRequest(locationRequest);

بعد ذلك، تحقق مما إذا كانت إعدادات الموقع الحالية متوافقة:

Kotlin

val builder = LocationSettingsRequest.Builder()

// ...

val client: SettingsClient = LocationServices.getSettingsClient(this)
val task: Task<LocationSettingsResponse> = client.checkLocationSettings(builder.build())

Java

LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();

// ...

SettingsClient client = LocationServices.getSettingsClient(this);
Task<LocationSettingsResponse> task = client.checkLocationSettings(builder.build());

عند تشغيل Task مكتملة، يمكن لتطبيقك التحقق من إعدادات الموقع من خلال مراجعة الحالة الرمز من LocationSettingsResponse الخاص بك. للحصول على مزيد من التفاصيل حول الحالة الراهنة للشخصيات ذات الصلة إعدادات الموقع الجغرافي، يمكن لتطبيقك الاتصال LocationSettingsResponse كائن getLocationSettingsStates() .

مطالبة المستخدم بتغيير إعدادات الموقع الجغرافي

لتحديد ما إذا كانت إعدادات الموقع الجغرافي مناسبة للموقع الجغرافي الطلب، إضافة OnFailureListener إلى عنصر Task يتحقّق من إعدادات الموقع الجغرافي. بعد ذلك، تحقق من إذا كانت تم تمرير كائن Exception إلى طريقة onFailure() هي مثيل لـ ResolvableApiException، مما يشير إلى أن الإعدادات يجب تغييره. بعد ذلك، اعرض مربع حوار يطالب المستخدم بالحصول على إذن لتعديل إعدادات الموقع الجغرافي من خلال طلب startResolutionForResult()

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

Kotlin

task.addOnSuccessListener { locationSettingsResponse ->
    // All location settings are satisfied. The client can initialize
    // location requests here.
    // ...
}

task.addOnFailureListener { exception ->
    if (exception is ResolvableApiException){
        // Location settings are not satisfied, but this can be fixed
        // by showing the user a dialog.
        try {
            // Show the dialog by calling startResolutionForResult(),
            // and check the result in onActivityResult().
            exception.startResolutionForResult(this@MainActivity,
                    REQUEST_CHECK_SETTINGS)
        } catch (sendEx: IntentSender.SendIntentException) {
            // Ignore the error.
        }
    }
}

Java

task.addOnSuccessListener(this, new OnSuccessListener<LocationSettingsResponse>() {
    @Override
    public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
        // All location settings are satisfied. The client can initialize
        // location requests here.
        // ...
    }
});

task.addOnFailureListener(this, new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception e) {
        if (e instanceof ResolvableApiException) {
            // Location settings are not satisfied, but this can be fixed
            // by showing the user a dialog.
            try {
                // Show the dialog by calling startResolutionForResult(),
                // and check the result in onActivityResult().
                ResolvableApiException resolvable = (ResolvableApiException) e;
                resolvable.startResolutionForResult(MainActivity.this,
                        REQUEST_CHECK_SETTINGS);
            } catch (IntentSender.SendIntentException sendEx) {
                // Ignore the error.
            }
        }
    }
});

الدرس التالي، تلقّي تحديثات الموقع الجغرافي: البرامج كيفية الحصول على تحديثات الموقع بشكل دوري.