存取 Google API

如要在 Android 應用程式中存取 Google Play 服務支援的 API,您必須使用 API 用戶端物件。這些物件會處理與 Google Play 服務的連線,並在連線可用時將要求排入佇列,然後依序執行。您可以視需要建立新的 API 用戶端,因為這類用戶端的建構成本較低。

開始使用

開始之前,請務必在應用程式專案中設定 Google Play 服務

如要存取不需要授權的服務,請建立服務用戶端物件的例項,並傳遞 ContextActivity 物件。如有需要,系統會在執行任何 API 呼叫前,提示使用者升級 Google Play 服務。

下列程式碼片段顯示如何使用 Fused Location Provider 取得裝置的最後已知位置:

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