我们正在开发一款需要在后台扫描iBeacons的应用。我们做了很多优化,现在它在Kitkat和Lollipop设备上运行良好,而且不会消耗太多电池。
在Marshmallow上,我们需要精确的位置许可才能扫描iBeacons(粗略位置有延迟)。即使我们有相同的省电逻辑,这也会耗费大量电池。
有没有办法可以在设备静止(无移动)时释放精确位置权限并在看到移动时获取它?由于用户在应用启动时已提供运行时权限,因此重新获取该权限不应再次带来权限对话框。
如果有办法实现这一目标,它将有助于我们节省电池消耗问题。
答案 0 :(得分:0)
几点:
扫描BLE设备需要android.permission.ACCESS_COARSE_LOCATION
或android.permission.ACCESS_FINE_LOCATION
应用获得哪一个并不重要。
在我的测试中,上述任一权限之间的BLE设备扫描性能没有差异。出于这个原因,Android Beacon Library文档建议请求android.permission.ACCESS_COARSE_LOCATION
,并在其清单中声明此权限。
声明,请求或获得许可对电池消耗没有影响。它实际上是在进行特定于位置的操作(BLE扫描,请求GPS位置更新等),这会影响电池的使用。
问题描述显示,在获得android.permission.ACCESS_FINE_LOCATION
与android.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的权限。)