gpt4 book ai didi

Android:新的 Google 客户端 API 位置

转载 作者:行者123 更新时间:2023-11-29 19:46:52 30 4
gpt4 key购买 nike

案例:应用程序需要设备位置来指定网络请求。如果位置提供者被禁用,它应该使用最后已知的位置。作为 android.location seems to be deprecated in favor of Fused location API ,我决定使用新的 API 但遇到了一些问题。使用旧 API,我的案例看起来像这样:

//get Location
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
...
bestProvider = locationManager.getBestProvider(criteria, true);

protected void onResume() {
super.onResume();

//check providers. If providers disabled, use last known location
if (locationManager.isProviderEnabled(bestProvider)) {
locationManager.requestLocationUpdates(bestProvider, 1000 * 60, 100, this);
} else {
Location location = locationManager.getLastKnownLocation(bestProvider);
}

但我不确定如何在 Fused API 中执行类似的操作。新 API 中提供商的可用性如何?因为 Fused Location(GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener) 的新接口(interface)没有给我提示。

我想了解的是我的帖子中描述的用例。 如果位置提供商被禁用,它应该使用最后一个已知位置。因此,核心位置 API 中针对这种情况的条件语句是 isProviderEnabled() 方法的结果。但是新的 API 呢?

最佳答案

首先,LocationManager 没有被弃用。但它直接使用 Android API。 Google Fused Location 依赖于 Google API(不是 Android API,这意味着并非所有手机默认都有它)。

在 Google API 中,您不必担心使用哪个提供程序。但您只需连接到 API、注册回调、发送请求,仅此而已。

https://developer.android.com/training/location/receive-location-updates.html

来自多个 Google 开发者文档:

这将放在您的应用程序 build.gradle 中

apply plugin: 'com.android.application'
...

dependencies {
compile 'com.google.android.gms:play-services-location:9.0.0'
}

在你的 Activity 中,应该放这样的东西

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

mGoogleApiClient 必须声明为 GoogleApiClient GoogleApiClient mGoogleApiClient;

当然,这个activity必须实现GoogleApiClient.ConnectionCallbacks,这个有两个函数onConnected和onConnectionSuspended。

同时实现 GoogleApiClient.OnConnectionFailedListener。这有一个函数 OnConnectionFailed

在 OnConnectionFailed 中,处理失败(例如 AlertDialog 表示与 Google API 服务连接时出现错误)

在 OnConnection 中,你可以放这样的东西

    LocationRequest mLocationRequest = new LocationRequest().setInterval(1000 * 60);
LocationServices.FusedLocationApi.requestLocationUpdates(
mGoogleApiClient, mLocationRequest, this);

请注意, Activity 必须实现 com.google.android.gms.location.LocationListener

这是一种方法,另一种方法是使用PendingIntent绑定(bind)BroadcastReceiver(性能更高,但监听器方法可能没问题)

关于Android:新的 Google 客户端 API 位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37436131/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com