棉花糖 - iBeacon精细定位电池耗尽

时间:2016-03-08 13:46:56

标签: android android-6.0-marshmallow ibeacon-android

我们正在开发一款需要在后台扫描iBeacons的应用。我们做了很多优化,现在它在Kitkat和Lollipop设备上运行良好,而且不会消耗太多电池。

在Marshmallow上,我们需要精确的位置许可才能扫描iBeacons(粗略位置有延迟)。即使我们有相同的省电逻辑,这也会耗费大量电池。

有没有办法可以在设备静止(无移动)时释放精确位置权限并在看到移动时获取它?由于用户在应用启动时已提供运行时权限,因此重新获取该权限不应再次带来权限对话框。

如果有办法实现这一目标,它将有助于我们节省电池消耗问题。

1 个答案:

答案 0 :(得分:0)

几点:

  • 扫描BLE设备需要android.permission.ACCESS_COARSE_LOCATIONandroid.permission.ACCESS_FINE_LOCATION应用获得哪一个并不重要。

  • 在我的测试中,上述任一权限之间的BLE设备扫描性能没有差异。出于这个原因,Android Beacon Library文档建议请求android.permission.ACCESS_COARSE_LOCATION,并在其清单中声明此权限。

  • 声明,请求或获得许可对电池消耗没有影响。它实际上是在进行特定于位置的操作(BLE扫描,请求GPS位置更新等),这会影响电池的使用。

问题描述显示,在获得android.permission.ACCESS_FINE_LOCATIONandroid.permission.ACCESS_COARSE_LOCATION时,应用会使用更多电量。由于以上几点,我不相信信标扫描的区别。一个可能的替代解释是应用程序正在从操作系统请求位置更新(因为我看不到代码,我不知道这是否属实 - 这只是一个理论)。如果获得ACCESS_FINE_LOCATION,则会解锁GPS_PROVIDER,从而可能会启动GPS并导致额外的电量消耗。

请参阅:http://developer.android.com/guide/topics/location/strategies.html

  

注意:如果您同时使用NETWORK_PROVIDER和GPS_PROVIDER,则只需要请求ACCESS_FINE_LOCATION权限,因为它包含两个提供商的权限。 (ACCESS_COARSE_LOCATION的权限仅包含NETWORK_PROVIDER的权限。)