Для доступа к API, работающим на базе сервисов Google Play , в вашем Android-приложении необходимо использовать объекты API-клиентов. Эти объекты обрабатывают подключение к сервисам Google Play, ставят запросы в очередь и выполняют их по порядку, когда соединение становится доступным. Вы можете создавать новые API-клиенты по мере необходимости, поскольку их создание обходится недорого.
Начать
Прежде чем начать, убедитесь, что в вашем проекте приложения настроены сервисы Google Play .
Для доступа к сервису, не требующему авторизации, создайте экземпляр клиентского объекта сервиса, передав в качестве параметра либо объект Context , либо объект Activity . При необходимости пользователям будет предложено обновить сервисы Google Play перед выполнением каких-либо вызовов API.
Следующий фрагмент кода показывает, как получить последнее известное местоположение устройства с помощью поставщика объединенных данных о местоположении (Fused Location Provider):
Котлин
// Code required for requesting location permissions omitted for brevity. val client = LocationServices.getFusedLocationProviderClient(this) // Get the last known location. In some rare situations, this can be null. client.lastLocation.addOnSuccessListener { location : Location? -> location?.let { // Logic to handle location object. } }
Java
// Code required for requesting location permissions omitted for brevity. FusedLocationProviderClient client = LocationServices.getFusedLocationProviderClient(this); // Get the last known location. In some rare situations, this can be null. client.getLastLocation() .addOnSuccessListener(this, location -> { if (location != null) { // Logic to handle location object. } });
Для доступа к API, требующим авторизации пользователя, следуйте руководству по авторизации доступа к данным пользователей Google . Если вы используете API, требующий объект GoogleSignInAccount , используйте метод AuthorizationResult#toGoogleSignInAccount() .
Проверьте доступность API.
Прежде чем включать функцию, зависящую от API сервисов Google Play, проверьте, доступен ли этот API на устройстве, вызвав метод checkApiAvailability() .
Следующий фрагмент кода показывает, как проверить доступность объединенного поставщика местоположения:
Котлин
fun getLastLocationIfApiAvailable(context: Context?): Task<Location>? { val client = getFusedLocationProviderClient(context) return GoogleApiAvailability.getInstance() .checkApiAvailability(client) .onSuccessTask { _ -> client.lastLocation } .addOnFailureListener { _ -> Log.d(TAG, "Location unavailable.")} }
Java
public Task<Location> getLastLocationIfApiAvailable(Context context) { FusedLocationProviderClient client = getFusedLocationProviderClient(context); return GoogleApiAvailability.getInstance() .checkApiAvailability(client) .onSuccessTask(unused -> client.getLastLocation()) .addOnFailureListener(e -> Log.d(TAG, "Location unavailable.")); }