বর্তমান জায়গা (লিগ্যাসি)

ইউরোপীয় অর্থনৈতিক অঞ্চল (EEA)-এর ডেভেলপার

Android-এর জন্য Places SDK ব্যবহার করে, আপনি ডিভাইসের বর্তমানে-রিপোর্ট করা লোকেশনে থাকা জায়গাটি খুঁজে পেতে পারেন। জায়গার উদাহরণের মধ্যে স্থানীয় ব্যবসা, উল্লেখযোগ্য স্থান এবং ভৌগোলিক লোকেশন অন্তর্ভুক্ত।

অনুমতি

লাইব্রেরি ব্যবহার করার জন্য আপনার অ্যাপের ম্যানিফেস্টে কোনও অতিরিক্ত অনুমতি ঘোষণা করার প্রয়োজন নেই, কারণ লাইব্রেরি তার ম্যানিফেস্টে ব্যবহৃত সমস্ত অনুমতি ঘোষণা করে। তবে, আপনার অ্যাপ যদি 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 তৈরি করুন, Place.Field-এর List পাস করান, আপনার অ্যাপকে অনুরোধ করতে হবে এমন প্লেস ডেটা টাইপ নির্দিষ্ট করুন।
  3. PlacesClient.findCurrentPlace()-এ কল করুন, আগের ধাপে তৈরি করা FindCurrentPlaceRequest পাস করুন।
  4. FindCurrentPlaceResponse থেকে PlaceLikelihood-এর তালিকা পান।

ফিল্ডগুলি জায়গা সার্চের ফলাফলের সাথে সম্পর্কিত এবং তিনটি বিলিং বিভাগে বিভক্ত: বেসিক, পরিচিতি এবং পরিবেশ। প্রাথমিক ফিল্ডের জন্য বেস রেট অনুযায়ী বিল করা হয় এবং এর জন্য কোনও অতিরিক্ত চার্জ লাগে না। যোগাযোগ ও পরিবেশ ফিল্ডের জন্য বেশি চার্জ করা হয়। প্লেস ডেটা অনুরোধের জন্য কীভাবে বিল করা হয় সেই সম্পর্কে আরও তথ্য পেতে, ব্যবহার ও বিলিং দেখুন।

API একটি FindCurrentPlaceResponse একটি Task-এ রিটার্ন করে। FindCurrentPlaceResponse-এ PlaceLikelihood অবজেক্টের একটি তালিকা থাকে যা সেইসব জায়গাকে প্রতিনিধিত্ব করে যেখানে ডিভাইসটি থাকতে পারে। প্রতিটি জায়গার জন্য, ফলাফলে একটি ইঙ্গিত অন্তর্ভুক্ত থাকে যে জায়গাটি সঠিক হওয়ার সম্ভাবনা কতটা। প্রদত্ত ডিভাইস লোকেশনের সাথে সম্পর্কিত কোনও পরিচিত জায়গা না থাকলে তালিকাটি খালি থাকতে পারে।

আপনি Place অবজেক্ট ফিরিয়ে আনতে PlaceLikelihood.getPlace() কল করতে পারেন এবং PlaceLikelihood.getLikelihood() কল করে জায়গার সম্ভাব্য রেটিং পেতে পারেন। ভ্যালু বেশি হলে, সেই জায়গাটি সবচেয়ে ভালো ম্যাচ হওয়ার সম্ভাবনা বেশি।

নিম্নলিখিত কোড স্যাম্পেল সেইসব জায়গার তালিকা ফিরিয়ে আনে যেখানে ডিভাইসটি থাকার সম্ভাবনা সবচেয়ে বেশি এবং প্রতিটি জায়গার নাম ও সম্ভাবনা লগ করে।

Kotlin

// Use fields to define the data types to return.
val placeFields = listOf(Place.Field.DISPLAY_NAME, Place.Field.FORMATTED_ADDRESS, Place.Field.LOCATION)

// Define the search area around the current location (500m radius).
val currentLocation = LatLng(37.4220, -122.0841)
val circle = CircularBounds.newInstance(currentLocation, 500.0)
val request = SearchNearbyRequest.builder(circle, placeFields)
    .setMaxResultCount(20)
    .build()

// Call searchNearby and handle the response (first check that the user has granted permission).
if (ContextCompat.checkSelfPermission(this, permission.ACCESS_FINE_LOCATION) ==
    PackageManager.PERMISSION_GRANTED
) {
    placesClient.searchNearby(request).addOnSuccessListener { response ->
        binding.progressBar.visibility = View.GONE
        adapter.setPlaces(response.places)
    }.addOnFailureListener { exception ->
        binding.progressBar.visibility = View.GONE
        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 =
        Arrays.asList(
                Place.Field.DISPLAY_NAME,
                Place.Field.FORMATTED_ADDRESS,
                Place.Field.LOCATION);

// Define the search area around the current location.
LatLng currentLocation = new LatLng(37.4220, -122.0841);
LocationRestriction circle =
        CircularBounds.newInstance(currentLocation, /* radius= */ 500.0);

// Use the builder to create a SearchNearbyRequest.
SearchNearbyRequest request =
        SearchNearbyRequest.builder(circle, placeFields).setMaxResultCount(20).build();

// Call searchNearby and handle the response (first check that the user has granted
// permission).
if (ContextCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION)
        == PackageManager.PERMISSION_GRANTED) {
    Task<SearchNearbyResponse> placeResponse = placesClient.searchNearby(request);
    placeResponse.addOnCompleteListener(
            task -> {
                binding.progressBar.setVisibility(View.GONE);
                if (task.isSuccessful()) {
                    SearchNearbyResponse response = task.getResult();
                    adapter.setPlaces(response.getPlaces());
                } else {
                    Exception exception = task.getException();
                    if (exception instanceof ApiException apiException) {
                        Log.e(
                                "CurrentPlace",
                                "Place not found: " + apiException.getStatusCode());
                    }
                }
            });
} else {
    // A local method to request required permissions;
    // See https://developer.android.com/training/permissions/requesting
    getLocationPermission();
}

      

সম্ভাব্যতার ভ্যালু সম্পর্কে মনে রাখা বিষয়:

  • সম্ভাব্যতা, একটি অনুরোধের জন্য রিটার্ন করা জায়গার তালিকার মধ্যে জায়গাটি সবচেয়ে ভাল ম্যাচ হওয়ার আপেক্ষিক সম্ভাবনা প্রদান করে। আপনি বিভিন্ন অনুরোধের মধ্যে সম্ভাবনার তুলনা করতে পারবেন না।
  • সম্ভাব্যতার মান ০.০ থেকে ১.০-এর মধ্যে হবে।

যেমন, সঠিক জায়গাটি যে জায়গা ক হওয়ার সম্ভাবনা ৫৫% এবং জায়গা খ হওয়ার সম্ভাবনা ৩৫%, তা বোঝানোর জন্য, উত্তরে দুটি মেম্বার আছে, জায়গা ক-এর সম্ভাবনা ০.৫৫ এবং জায়গা খ-এর সম্ভাবনা ০.৩৫।

আপনার অ্যাপে অ্যাট্রিবিউশন দেখানো

আপনার অ্যাপ PlacesClient.findCurrentPlace()-এর থেকে পাওয়া তথ্য দেখালে, অ্যাপটিকে অবশ্যই অ্যাট্রিবিউশন দেখাতে হবে। অ্যাট্রিবিউশন সম্পর্কিত ডকুমেন্টেশন দেখুন।