V-P*_*PTR 83 android bluetooth bluetooth-lowenergy android-6.0-marshmallow
升级到Android版本6.0后,只有在设备上启用了位置服务时,蓝牙低功耗(BLE)扫描才有效.请参阅此处以供参考:Android 6.0上的蓝牙低功耗startScan无法找到设备
基本上,您需要为应用程序以及手机启用权限.这是一个错误吗?是否可以在没有实际启用位置服务的情况下扫描?我不想拥有所有应用的位置.
编辑
我没有提到我正在使用该startScan()方法BluetoothLeScanner API 21提供.我可以使用此方法所需的清单中的课程和良好的位置权限.我只是不希望我的应用程序的用户必须在他们的设备(GPS等)上启用位置服务才能使用我的应用程序.
以前,该startScan()方法将在手机上禁用位置服务的情况下运行并返回结果.但是,在Marshmallow上,相同的应用程序将"扫描"但是静默失败并且在手机上未启用位置服务且课程/精确位置权限仍在清单中时未返回任何结果.
V-P*_*PTR 70
不,这不是一个错误.
这个问题提交给谷歌,他们回答说这是预期的行为,他们不会修复它.他们指示开发人员访问此站点,指出现在需要位置权限才能访问硬件标识符.现在,开发人员有责任让用户了解该要求.
然而,在这个问题中,它没有解决为什么需要定位服务(GPS等),并且似乎他们不会重新讨论这个问题来解释这一点,因为它已被标记为预期的行为.
要回答问题的第二部分:是的,可以在不启用位置服务的情况下进行扫描.您可以使用蓝牙经典扫描BluetoothAdapter.getDefaultAdapter().startDiscovery(),这将关闭位置服务.这将发现所有蓝牙设备,BLE和其他.但是,BLE设备将没有扫描记录,如果它们被视为结果,它们将具有startScan().
JiT*_*HiN 11
我通过在gradle文件中设置targetSdkVersion为22来解决这个问题.您必须ACCESS_COARSE_LOCATION在清单中声明,但即使用户从应用程序设置中拒绝此权限,BLE扫描也会起作用.
这只是一个避免请求位置许可的黑客行为.最好定位最新的Android版本.
小智 8
我发现在Android 6之后你必须授予ACCESS_COARSE_LOCATION权限.但在某些设备上还需要打开手机定位服务(GPS),以便发现外围设备.我发现使用Nexus 5x和Android 7.0.
| 归档时间: |
|
| 查看次数: |
60286 次 |
| 最近记录: |