باستخدام حزمة تطوير برامج الأماكن لأجهزة 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 للبدء.
الحصول على الموقع الحالي
للعثور على النشاط التجاري المحلي أو مكان آخر يوجد فيه الجهاز حاليًا اتبع الخطوات التالية:
- الاتصال بالرقم
ContextCompat.checkSelfPermission
للتحقق مما إذا كان المستخدم قد منح الإذن بالوصول إلى جهازه الموقع. يجب أن يتضمّن تطبيقك أيضًا رمزًا لتطلب من المستخدم الحصول على الإذن، ولمعالجة النتيجة. يُرجى الاطّلاع على مقالة طلب أذونات التطبيق. لمزيد من التفاصيل. - إنشاء
FindCurrentPlaceRequest
، وتمريرList
منPlace.Field
ثانية، مع تحديد أنواع بيانات الأماكن التي ينبغي أن يطلبها تطبيقك. - يمكنك الاتصال على الرقم
PlacesClient.findCurrentPlace()
، لاجتيازFindCurrentPlaceRequest
الذي قمت بإنشائه في السابق . - يمكنك الحصول على قائمة
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()
،
يجب أن يعرض التطبيق أيضًا الإحالات. راجع الوثائق المتعلقة
الإحالة.