如何将 GoogleApiClient 位置服务与 Google Api 一起使用?

Posted

技术标签:

【中文标题】如何将 GoogleApiClient 位置服务与 Google Api 一起使用?【英文标题】:How can I use GoogleApiClient location services with Google Api? 【发布时间】:2021-08-22 00:42:46 【问题描述】:

在一个教程中,我正在观看讲师将 GoogleApiClient 用于 LocationServices,就像这样。

我知道 GoogleApiClient 已被弃用,我们应该改用 GoogleApi,它包含本文中的所有 Google Api:https://android-developers.googleblog.com/2017/11/moving-past-googleapiclient_21.html

但是,本文只讨论了 GoogleSignInClient,根本没有讨论位置服务。

我的问题如下:

    当我甚至尝试使用 GoogleSignInClient 时,我找不到任何东西。我唯一的依赖是:implementation 'com.google.android.gms:play-services-location:18.0.0'

我的意思是当我输入:private GoogleSignInClient googleSignInClient...什么都没有出现。

    我找不到任何用于定位服务的 GoogleApi(正如预期的那样,因为甚至 GoogleSignInClient 都没有出现)

这里可能出了什么问题?

更新:

所以他的代码看起来像这样:

private GoogleApiClient googleApiClient;
private FusedLocationProviderClient fusedLocationProviderClient;


fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(MainActivity.this);

        googleApiClient = new GoogleApiClient.Builder(this)
                .addApi(LocationServices.API)
                .addOnConnectionFailedListener(this)
                .addConnectionCallbacks(this)
                .build();

..但我需要使用 GoogleApi 而不是 GoogleApiClient 来翻译它(因为它已被弃用)。

谢谢!

【问题讨论】:

【参考方案1】:

您在视频中看到的内容指的是 FusedLocationProviderApi 已弃用的 API。

如果要使用Google Play Service API监听用户位置需要使用新的FusedLocationProviderClient,可以找到官方的示例实现here

根据您的用例,考虑添加一个备用方案,以防设备未安装 Play 服务(例如使用 Android 原生 API)

使用新入口点类的示例代码(您不需要直接使用GoogleApi 类):

fun getLastLocationIfApiAvailable(context: Context): Task<Location>? 
    val client = LocationServices.getFusedLocationProviderClient(context)
    return GoogleApiAvailability.getInstance()
        .checkApiAvailability(client)
        .onSuccessTask  _ -> client.lastLocation 
        .addOnFailureListener  _ -> Log.d(TAG, "Location unavailable.")

如果您需要处理GoogleApiAvailability 的所有可能输出,请检查此SO answer

【讨论】:

嗨,谢谢。但是,在视频中他使用的是 FusedLocationProviderClient,而不是 FusedLocationProviderApi。 'client' 指的是实例变量 GoogleApiClient 客户端 @CodingChap 我添加了一个代码示例。不需要直接使用GoogleApi

以上是关于如何将 GoogleApiClient 位置服务与 Google Api 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用 GoogleAPIClient 请求位置更新?

立即删除位置更新

Android使用GoogleApiClient获取用户位置纬度和经度[重复]

如何将 Googleapiclient 传递给 Google Play 游戏的另一个所有活动

GoogleApiClient onConnectionSuspended ,我应该再次调用 mGoogleApiClient.connect() 吗?

GoogleApiClient 中的 getLastLocation() 始终为空