GoogleApi ক্লায়েন্টে স্থানান্তর করুন

Google Play services SDK-এর 11.2.0 রিলিজে Android-এর জন্য Places SDK অ্যাক্সেস করার একটি নতুন উপায় অন্তর্ভুক্ত করা হয়েছে। GoogleApi ক্লায়েন্টটি এর পূর্বসূরি ( GoogleApiClient )-এর চেয়ে ব্যবহার করা সহজ, কারণ এটি Google Play services-এর সাথে সংযোগগুলো স্বয়ংক্রিয়ভাবে পরিচালনা করে। এটি আপনার অ্যাপে বয়লারপ্লেট কোডের পরিমাণ কমায় এবং অনেক সাধারণ সমস্যা দূর করতে সাহায্য করতে পারে। নতুন API-টিতে বেশ কিছু উন্নতি রয়েছে:

  • সংযোগ প্রক্রিয়াটি স্বয়ংক্রিয়ভাবে পরিচালিত হয়, তাই নতুন এপিআইটি বাস্তবায়ন করা তুলনামূলকভাবে সহজ।
  • এপিআই কলগুলো এখন স্বয়ংক্রিয়ভাবে পরিষেবা সংযোগ স্থাপিত হওয়ার জন্য অপেক্ষা করে, ফলে অনুরোধ করার আগে onConnected জন্য অপেক্ষা করার প্রয়োজন হয় না।
  • টাস্কস এপিআই অ্যাসিঙ্ক্রোনাস অপারেশনগুলোকে একত্রিত করা সহজ করে তোলে।
  • কোডটি স্বয়ংসম্পূর্ণ, এবং এটিকে একটি শেয়ার্ড ইউটিলিটি ক্লাস বা অনুরূপ কোনো ক্লাসে স্থানান্তর করা যেতে পারে।

আপনার অ্যাপকে GoogleApi ক্লায়েন্ট ব্যবহার করার জন্য আপডেট করতে হলে, আপনার Places SDK for Android ইমপ্লিমেন্টেশনে কিছু পরিবর্তন আনতে হবে। এই নির্দেশিকায় Places SDK for Android-এর পরিবর্তনগুলো বর্ণনা করা হয়েছে এবং নতুন ক্লায়েন্টটি ব্যবহার করার জন্য আপনার অ্যাপ আপডেট করার সময় করণীয় পদক্ষেপগুলোর সুপারিশ করা হয়েছে।

সংক্ষিপ্ত বিবরণ

পরিবর্তনের প্রধান ক্ষেত্রগুলো নিম্নরূপ:

  • দুটি নতুন এন্ট্রি পয়েন্ট রয়েছে: GeoDataClient এবং PlaceDetectionClient । সমস্ত এপিআই-এর জন্য একটি GoogleApiClient ইনস্ট্যান্স তৈরি করার পরিবর্তে, আপনার অ্যাপকে এখন GeoDataClient এবং PlaceDetectionClient উভয়কেই ইনস্ট্যানশিয়েট করতে হবে।
  • যেহেতু কানেকশন কলব্যাকগুলোর আর প্রয়োজন নেই, আপনি নিশ্চিন্তে আপনার অ্যাপ থেকে এগুলো সরিয়ে ফেলতে পারেন।
  • নতুন Places API মেথডগুলো এখন অ্যাসিঙ্ক্রোনাস এবং PendingResult পরিবর্তে একটি Task রিটার্ন করে।

প্লেসেস এপিআই লোড করুন

Places API লোড করতে, এন্ট্রি পয়েন্টগুলো ডিক্লেয়ার করুন, তারপর নিচের উদাহরণে দেখানো অনুযায়ী আপনার fragment বা activity-র onCreate() মেথডে ক্লায়েন্টগুলোকে ইনস্ট্যানশিয়েট করুন:

// The entry points to the Places API.
private GeoDataClient mGeoDataClient;
private PlaceDetectionClient mPlaceDetectionClient;

...
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Construct a GeoDataClient.
    mGeoDataClient = Places.getGeoDataClient(this, null);

    // Construct a PlaceDetectionClient.
    mPlaceDetectionClient = Places.getPlaceDetectionClient(this, null);

তুলনা

নতুন Places API মেথডগুলো এখন অ্যাসিঙ্ক্রোনাস এবং PendingResult এর পরিবর্তে একটি Task রিটার্ন করে। ডেটা স্ট্রাকচারগুলো পরিবর্তিত হয়নি, তাই ফলাফল হ্যান্ডেল করার জন্য আপনার বিদ্যমান কোড আপডেট করার প্রয়োজন হবে না। নিম্নলিখিত কোড উদাহরণগুলোতে GetCurrentPlace() এর নতুন এবং পূর্ববর্তী সংস্করণগুলোর মধ্যে তুলনা করা হয়েছে:

নতুন উপায়

Task<PlaceLikelihoodBufferResponse> placeResult = mPlaceDetectionClient.getCurrentPlace(null);
placeResult.addOnCompleteListener(new OnCompleteListener<PlaceLikelihoodBufferResponse>() {
    @Override
    public void onComplete(@NonNull Task<PlaceLikelihoodBufferResponse> task) {
        PlaceLikelihoodBufferResponse likelyPlaces = task.getResult();
        for (PlaceLikelihood placeLikelihood : likelyPlaces) {
            Log.i(TAG, String.format("Place '%s' has likelihood: %g",
                placeLikelihood.getPlace().getName(),
                placeLikelihood.getLikelihood()));
        }
        likelyPlaces.release();
    }
});

পুরানো পদ্ধতি

PendingResult<PlaceLikelihoodBuffer> result = Places.PlaceDetectionApi
    .getCurrentPlace(mGoogleApiClient, null);
result.setResultCallback(new ResultCallback<PlaceLikelihoodBuffer>() {
  @Override
  public void onResult(PlaceLikelihoodBuffer likelyPlaces) {
    for (PlaceLikelihood placeLikelihood : likelyPlaces) {
      Log.i(TAG, String.format("Place '%s' has likelihood: %g",
          placeLikelihood.getPlace().getName(),
          placeLikelihood.getLikelihood()));
    }
    likelyPlaces.release();
  }
});

আরও জানুন

গুগল এপিআই অ্যাক্সেস করার বিষয়ে আরও জানুন।