访问 Google API

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

开始使用

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

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

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

KotlinJava
// 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 是否可用

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

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

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