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