访问 Google API

如需在 Android 应用中访问由 Google Play 服务提供支持的 API,您需要使用 API 客户端对象。这些对象会处理与 Google Play 服务的连接,将请求加入队列,并在有连接可用时按顺序执行这些请求。由于 API 客户端的构建成本很低,因此您可以根据需要创建新的 API 客户端。

开始使用

开始之前,请务必在应用项目中设置 Google Play 服务

如需访问不需要授权的服务,请创建服务的客户端对象的实例,并传递 ContextActivity 对象。在执行任何 API 调用之前,系统会视需要提示用户升级 Google Play 服务。

以下代码段展示了如何使用合并位置信息提供程序获取设备的最近一次已知位置信息:

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 的可用性

在启用依赖于 Google Play 服务 API 的功能之前,请通过调用 checkApiAvailability() 检查设备上是否有该 API。

以下代码段展示了如何检查是否有可用的合并位置信息提供程序:

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."));
}