暂时启用位置高精度模式

时间:2018-05-25 06:19:44

标签: android google-play-services fusedlocationproviderapi

在应用程序中我正在使用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模式时,此请求似乎没有获得任何位置更新。

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

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

它将向用户显示一个对话框并要求他更改位置模式,但此更改会将设备位置模式更改为高精度。即使应用程序关闭后,更改仍然保持不变并消耗数据。

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

1 个答案:

答案 0 :(得分:1)

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

enter image description here

onStart()应该实施onResume()onPause()onStop()onDestroy(),{{1}}。这些甚至是SDK文档中一个非常合适的例子:

Handling Lifecycles with Lifecycle-Aware Components