Чтобы получить доступ к API, работающим на основе сервисов Google Play, в вашем приложении Android, вам необходимо использовать объекты API-клиента. Эти объекты обрабатывают подключение к сервисам Google Play, ставят запросы в очередь и выполняют их по порядку, когда подключение доступно. Вы можете создавать новых клиентов API по мере необходимости, поскольку их создание не требует больших затрат.
Начать
Прежде чем начать, обязательно настройте сервисы Google Play в своем проекте приложения.
Чтобы получить доступ к сервису, не требующему авторизации, создайте экземпляр объекта клиента сервиса, передав ему либо объект Context
, либо объект Activity
. При необходимости пользователям предлагается обновить сервисы Google Play перед выполнением любых вызовов API.
В следующем фрагменте кода показано, как получить последнее известное местоположение устройства с помощью поставщика объединенных данных о местоположении:
Котлин
// 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. } }
Ява
// 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.")} }
Ява
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.")); }