暂时启用定位高精度模式
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.
【讨论】:
以上是关于暂时启用定位高精度模式的主要内容,如果未能解决你的问题,请参考以下文章