المكان الحالي

اختيار النظام الأساسي: Android iOS

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

الأذونات

لاستخدام المكتبة، ليس عليك الإفصاح عن أي أذونات إضافية في بيان التطبيق، لأنّ المكتبة تعلن عن جميع الأذونات التي تستخدمها في ملف البيان الخاص بها ومع ذلك، إذا كان تطبيقك يستخدم PlacesClient.findCurrentPlace()، يجب طلب أذونات تحديد الموقع الجغرافي في وقت التشغيل.

إذا كان تطبيقك لا يستخدم PlacesClient.findCurrentPlace()، عليك إزالة تم تقديم إذنَي ACCESS_FINE_LOCATION وACCESS_COARSE_LOCATION في المكتبة من خلال إضافة ما يلي إلى ملف البيان:

<manifest ... xmlns:tools="http://schemas.android.com/tools">
    ...
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" tools:node="remove"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" tools:node="remove"/>
    ...
</manifest>

قراءة المزيد عن الأذونات ويمكنك استخدام EasyPermissions للبدء.

الحصول على الموقع الحالي

للعثور على النشاط التجاري المحلي أو مكان آخر يوجد فيه الجهاز حاليًا اتبع الخطوات التالية:

  1. الاتصال بالرقم ContextCompat.checkSelfPermission للتحقق مما إذا كان المستخدم قد منح الإذن بالوصول إلى جهازه الموقع. يجب أن يتضمّن تطبيقك أيضًا رمزًا لتطلب من المستخدم الحصول على الإذن، ولمعالجة النتيجة. يُرجى الاطّلاع على مقالة طلب أذونات التطبيق. لمزيد من التفاصيل.
  2. إنشاء FindCurrentPlaceRequest، وتمرير List من Place.Field ثانية، مع تحديد أنواع بيانات الأماكن التي ينبغي أن يطلبها تطبيقك.
  3. يمكنك الاتصال على الرقم PlacesClient.findCurrentPlace()، لاجتياز FindCurrentPlaceRequest الذي قمت بإنشائه في السابق .
  4. يمكنك الحصول على قائمة PlaceLikelihood من FindCurrentPlaceResponse

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

تعرض واجهة برمجة التطبيقات FindCurrentPlaceResponse في Task يحتوي FindCurrentPlaceResponse على قائمة PlaceLikelihood تمثّل العناصر الأماكن التي يُحتمل أن يكون وضع الجهاز فيها. بالنسبة كل مكان، فإن النتيجة تتضمن مؤشرًا على احتمالية المكان الصحيح. قد تكون القائمة فارغة إذا لم يكن هناك مكان معروف. يتوافق مع الموقع المحدد للجهاز.

يمكنك الاتصال PlaceLikelihood.getPlace() لاسترداد Place الكائن، PlaceLikelihood.getLikelihood() لمعرفة تقييم احتمالية المكان. تعني القيمة الأعلى احتمالية أن المكان هو أفضل تطابق.

يسترجع نموذج الرمز التالي قائمة الأماكن التي تم وضع الجهاز فيها موقعها الأكثر احتمالاً، ويسجّل اسم كل مكان واحتمال حدوثه.

Kotlin



// Use fields to define the data types to return.
val placeFields: List<Place.Field> = listOf(Place.Field.NAME)

// Use the builder to create a FindCurrentPlaceRequest.
val request: FindCurrentPlaceRequest = FindCurrentPlaceRequest.newInstance(placeFields)

// Call findCurrentPlace and handle the response (first check that the user has granted permission).
if (ContextCompat.checkSelfPermission(this, permission.ACCESS_FINE_LOCATION) ==
    PackageManager.PERMISSION_GRANTED) {

    val placeResponse = placesClient.findCurrentPlace(request)
    placeResponse.addOnCompleteListener { task ->
        if (task.isSuccessful) {
            val response = task.result
            for (placeLikelihood: PlaceLikelihood in response?.placeLikelihoods ?: emptyList()) {
                Log.i(
                    TAG,
                    "Place '${placeLikelihood.place.name}' has likelihood: ${placeLikelihood.likelihood}"
                )
            }
        } else {
            val exception = task.exception
            if (exception is ApiException) {
                Log.e(TAG, "Place not found: ${exception.statusCode}")
            }
        }
    }
} else {
    // A local method to request required permissions;
    // See https://developer.android.com/training/permissions/requesting
    getLocationPermission()
}

      

Java


// Use fields to define the data types to return.
List<Place.Field> placeFields = Collections.singletonList(Place.Field.NAME);

// Use the builder to create a FindCurrentPlaceRequest.
FindCurrentPlaceRequest request = FindCurrentPlaceRequest.newInstance(placeFields);

// Call findCurrentPlace and handle the response (first check that the user has granted permission).
if (ContextCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
    Task<FindCurrentPlaceResponse> placeResponse = placesClient.findCurrentPlace(request);
    placeResponse.addOnCompleteListener(task -> {
        if (task.isSuccessful()){
            FindCurrentPlaceResponse response = task.getResult();
            for (PlaceLikelihood placeLikelihood : response.getPlaceLikelihoods()) {
                Log.i(TAG, String.format("Place '%s' has likelihood: %f",
                    placeLikelihood.getPlace().getName(),
                    placeLikelihood.getLikelihood()));
            }
        } else {
            Exception exception = task.getException();
            if (exception instanceof ApiException) {
                ApiException apiException = (ApiException) exception;
                Log.e(TAG, "Place not found: " + apiException.getStatusCode());
            }
        }
    });
} else {
    // A local method to request required permissions;
    // See https://developer.android.com/training/permissions/requesting
    getLocationPermission();
}

      

ملاحظات حول قيم الاحتمالية:

  • توفر الاحتمالية احتمالية نسبية للمكان الذي يمثل أفضل تطابق داخل قائمة الأماكن التي تم إرجاعها في طلب واحد. لا يمكنك مقارنة الاحتمالات عبر الطلبات المختلفة.
  • ستكون قيمة الاحتمال بين 0.0 و1.0.

على سبيل المثال، لتمثيل احتمال 55% أن يكون المكان الصحيح هو المكان A، واحتمال بنسبة 35% أن يكون المكان (ب)، يكون للرد عضوين، المكان A مع احتمال 0.55 والمكان B مع احتمالية 0.35.

عرض عمليات تحديد المصدر في تطبيقك

عندما يعرض تطبيقك معلومات تم الحصول عليها من PlacesClient.findCurrentPlace()، يجب أن يعرض التطبيق أيضًا الإحالات. راجع الوثائق المتعلقة الإحالة.