Android:新的Google客户端API位置

时间:2016-05-25 11:44:10

标签: android android-location

案例应用程序需要设备位置来指定Web请求。如果位置提供程序已禁用,则应使用上一个已知位置。作为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中查找?因为融合位置的新接口(GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener)没有给我提示。

我想要了解的是我的帖子中描述的用例。 如果位置提供程序已禁用,则应使用上一个已知位置。因此,此类情况下核心位置API中的条件语句是isProviderEnabled()方法的结果。但是新API怎么样?

1 个答案:

答案 0 :(得分:2)

首先,不推荐使用LocationManager。但它直接使用Android API。 Google融合位置依赖于Google API(不是Android API,这意味着并非所有手机都默认拥有它)。

在Google API中,您不必担心要使用哪个提供商。但您所需要的只是连接到API,注册回调,发送请求等等。

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

来自多个Google Developer文档:

这将放在您的app build.gradle

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

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

在你的活动中,应该放置

这样的东西
 mGoogleApiClient = new GoogleApiClient.Builder(this)
         .addApi(LocationServices.API)
         .addConnectionCallbacks(this)
         .addOnConnectionFailedListener(this)
         .build()

mGoogleApiClient必须声明为GoogleApiClient     GoogleApiClient mGoogleApiClient;

当然,此活动必须实现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);

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

这是一种方式,另一种方法是使用PendingIntent与BroadcastReceiver绑定(性能更高但侦听器方法可以正常)