存取 Google API

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

開始使用

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

如要存取不需要授權的服務,請建立服務用戶端物件的執行個體,並傳遞 ContextActivity 物件。如有需要,系統會提示使用者升級 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 是否可用

啟用依附於 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."));
}