Google Play services SDK के 11.2.0 वर्शन में, Places SDK for Android को ऐक्सेस करने का नया तरीका शामिल है. GoogleApi क्लाइंट का इस्तेमाल, इसके पिछले वर्शन (GoogleApiClient) की तुलना में ज़्यादा आसान है. ऐसा इसलिए, क्योंकि यह Google Play services से कनेक्शन अपने-आप मैनेज करता है. इससे आपके ऐप्लिकेशन में बॉयलरप्लेट कोड की मात्रा कम हो जाती है. साथ ही, इससे कई सामान्य समस्याओं को दूर करने में मदद मिल सकती है. नए एपीआई में कई सुधार किए गए हैं:
- कनेक्शन की प्रोसेस अपने-आप मैनेज होती है. इसलिए, नए एपीआई को लागू करना आसान है.
- अब एपीआई कॉल, सेवा कनेक्शन के चालू होने का इंतज़ार करते हैं. इसलिए, अनुरोध करने से पहले
onConnectedका इंतज़ार करने की ज़रूरत नहीं होती. - Tasks API की मदद से, एसिंक्रोनस ऑपरेशन को आसानी से कंपोज़ किया जा सकता है.
- कोड अपने-आप में पूरा होता है और इसे शेयर की गई यूटिलिटी क्लास या इसी तरह की किसी अन्य क्लास में ले जाया जा सकता है.
GoogleApi क्लाइंट का इस्तेमाल करने के लिए, आपको अपने ऐप्लिकेशन को अपडेट करना होगा. इसके लिए, आपको Places SDK for Android को लागू करने के तरीके में कुछ बदलाव करने होंगे. इस गाइड में, Places SDK for Android में हुए बदलावों के बारे में बताया गया है. साथ ही, नए क्लाइंट का इस्तेमाल करने के लिए, अपने ऐप्लिकेशन को अपडेट करते समय किए जाने वाले चरणों के बारे में सुझाव दिए गए हैं.
खास जानकारी
इन मुख्य बातों में बदलाव किए गए हैं:
- दो नए एंट्री पॉइंट हैं:
GeoDataClientऔरPlaceDetectionClient. सभी एपीआई को कवर करने के लिए, एकGoogleApiClientइंस्टेंस बनाने के बजाय, अब आपके ऐप्लिकेशन कोGeoDataClientऔरPlaceDetectionClient, दोनों को इंस्टैंशिएट करना होगा. - कनेक्शन कॉलबैक की अब ज़रूरत नहीं है. इसलिए, इन्हें हटाने के लिए अपने ऐप्लिकेशन को फिर से फ़ैक्टर किया जा सकता है.
- Places API के नए तरीके अब एसिंक्रोनस हैं. साथ ही, ये
PendingResultके बजायTaskदिखाते हैं.
Places API लोड करना
Places API को लोड करने के लिए, एंट्री पॉइंट घोषित करें. इसके बाद, अपने फ़्रैगमेंट या गतिविधि के 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(); } });
ज़्यादा जानें
Google API को ऐक्सेस करने के बारे में ज़्यादा जानें.