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