暂时启用定位高精度模式

Posted

技术标签:

【中文标题】暂时启用定位高精度模式【英文标题】:Temporarily enable Location High accuracy mode 【发布时间】:2018-11-04 11:14:56 【问题描述】:

在应用程序中我正在使用 FusedLocationProviderClient

mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);

我的位置请求是

    LocationRequest mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS);
    mLocationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

当设备定位模式处于仅 GPS 模式时,此请求似乎没有获得任何位置更新。

我可以发出位置设置请求并要求用户将位置模式更改为高精度以支持位置请求。

    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
    builder.addLocationRequest(mLocationRequest);
    mLocationSettingsRequest = builder.build();

它将向用户显示一个对话框并要求他更改定位模式,但此更改永久地将设备定位模式更改为高精度。即使在应用程序关闭后,更改保持不变并消耗电池。

有没有办法只为应用程序更改位置模式? 例如,当应用程序运行时,它可以处于高精度模式,而当应用程序关闭时,它将返回到设备之前的任何模式。

【问题讨论】:

【参考方案1】:

您必须考虑Activity Lifecycle,以便将配置更改为以前的状态,可以通过在切换模式之前读取Settings Client的配置来获得并保留它以供以后恢复。与恢复设置最相关的可能是方法onDestroy(),因为它始终是最终的最终调用(除非电池被断开)。

Activity 应该实现 onStart()onResume()onPause()onStop()onDestroy()。 SDK 文档中甚至还有一个非常合适的示例:

Handling Lifecycles with Lifecycle-Aware Components.

【讨论】:

以上是关于暂时启用定位高精度模式的主要内容,如果未能解决你的问题,请参考以下文章

Android 定位模式,无 GPS,AOSP 中的选项

高精度定位系统融合定位模式崭露头角

仅使用 GPS 无线电进行高精度 webkit 地理定位

C#调用百度高精度IP定位API通过IP获取地址

如何选择合适的GNSS定位模式实现实时导航定位?

如何正确提示用户开启“提高定位精度”设置?