A versão 11.2.0 do SDK do Google Play Services inclui uma nova maneira de acessar
o SDK do Places para Android. O cliente GoogleApi é mais fácil de usar do que o antecessor (GoogleApiClient), já que gerencia automaticamente as conexões com o Google Play Services. Isso reduz a quantidade de código
clichê no app e ajuda a eliminar muitas armadilhas comuns. A nova API oferece várias melhorias:
- O processo de conexão é gerenciado automaticamente, então a nova API exige menos trabalho para ser implementada.
- As chamadas de API agora aguardam automaticamente o estabelecimento da conexão de serviço, eliminando a necessidade de esperar o
onConnectedantes de fazer solicitações. - A API Tasks facilita a composição de operações assíncronas.
- O código é independente e pode ser movido para uma classe de utilidade compartilhada ou semelhante.
Para atualizar o app e usar o cliente GoogleApi, é necessário fazer algumas mudanças na implementação do SDK do Places para Android. Este guia descreve as mudanças no SDK do Places para Android e recomenda etapas a serem seguidas ao atualizar seu app para usar o novo cliente.
Visão geral
As principais áreas de mudança são:
- Há dois novos pontos de entrada:
GeoDataClientePlaceDetectionClient. Em vez de criar uma instânciaGoogleApiClientpara abranger todas as APIs, seu app agora precisa instanciarGeoDataClientePlaceDetectionClient. - Como os callbacks de conexão não são mais necessários, você pode refatorar o app com segurança para removê-los.
- Os novos métodos da API Places agora são assíncronos e retornam um
Taskem vez de umPendingResult.
Carregar a API Places
Para carregar a API Places, declare os pontos de entrada e instancie os clientes no método onCreate() do fragmento ou da atividade, conforme mostrado no exemplo a seguir:
// 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);
Comparação
Os novos métodos da API Places agora são assíncronos e retornam um Task em vez de um PendingResult. Como as estruturas de dados não mudaram, não é necessário atualizar o código atual para processar resultados.
Os exemplos de código a seguir comparam as versões nova e anterior de
GetCurrentPlace():
Como será agora
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(); } });
Como era antes
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(); } });
Saiba mais
Saiba mais sobre como acessar as APIs do Google.