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