Google Play 서비스 SDK 11.2.0 출시에는 Android용 Places SDK에 액세스하는 새로운 방법이 포함되어 있습니다. GoogleApi 클라이언트는 Google Play 서비스에 대한 연결을 자동으로 관리하므로 이전 버전 (GoogleApiClient)보다 사용하기 쉽습니다. 이렇게 하면 앱의 상용구 코드 양이 줄어들고 일반적인 함정을 많이 없앨 수 있습니다. 새 API는 다음과 같은 여러 개선사항을 제공합니다.
- 연결 프로세스가 자동으로 관리되므로 새 API를 구현하는 작업이 줄어듭니다.
- 이제 API 호출이 서비스 연결이 설정될 때까지 자동으로 기다리므로 요청을 하기 전에
onConnected를 기다릴 필요가 없습니다. - Tasks API를 사용하면 비동기 작업을 더 쉽게 구성할 수 있습니다.
- 코드는 자체적으로 포함되어 있으며 공유 유틸리티 클래스 등으로 이동할 수 있습니다.
GoogleApi 클라이언트를 사용하도록 앱을 업데이트하려면 Android용 Places SDK 구현을 일부 변경해야 합니다. 이 가이드에서는 Android용 Places SDK의 변경사항을 설명하고 새 클라이언트를 사용하도록 앱을 업데이트할 때 취해야 할 단계를 권장합니다.
개요
주요 변경사항은 다음과 같습니다.
GeoDataClient및PlaceDetectionClient이라는 두 가지 새로운 진입점이 있습니다. 모든 API를 포함하는 하나의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 액세스에 대해 자세히 알아보세요.