我正在使用com.google.android.gms.location.SettingsApi在我的Android应用中启用蓝牙和位置。它会弹出一个对话框,提示用户在禁用时启用它,以便我的应用程序可以扫描附近的蓝牙设备。我按照参考指南(https://developers.google.com/android/reference/com/google/android/gms/location/SettingsApi)中的说明进行操作。这非常简单:首先连接到GoogleApiClient,然后创建一个LcoationSettingsRequest.builder:
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
.addLocationRequest(mLocationRequestHighAccuracy)
.setNeedBle(true)
在我的情况下,我添加了setNeedBle(true),因为我还需要打开蓝牙。然后,您可以从SettingsApi调用checkLocationSettings并向结果添加回调。这会弹出一个对话框,提示用户打开蓝牙和位置,然后您会收到用户是否选择执行此操作的回调。
这适用于具有API22和Google Play服务版本8.4.89的设备,但在具有API23和GPS版本8.4.89的同一设备上也不行。只有setNeedBle(true)部分不能在API23上运行:当蓝牙关闭时,我没有得到对话框(但启用该位置的对话框工作正常)。由于它们都安装了相同版本的GPS,因此它与API22和API23有关。有谁知道这是一个错误还是我如何解决这个问题?
我发现了一个类似的问题(How to pop up Enable Bluetooth prompt from Google Play Services?),但有人建议在GPS版本8.1中修复,但我正在运行GPS v8.4。此外,这是一个稍微不同的问题,因为我没有获得SETTINGS_CHANGE_UNAVAILABLE状态。
答案 0 :(得分:0)
如果客户端使用BLE扫描来获取位置,则可以通过调用setNeedBle(boolean)请求启用BLE。
请参考解决方案: https://github.com/googlemaps/android-samples/tree/master/ApiDemos (如果您想在运行时授予API 23(Android M)的权限。)
另请参阅此官方报告:
https://developer.android.com/training/location/change-location-settings.html
https://developer.android.com/about/versions/marshmallow/android-6.0.html#bluetooth-stylus
希望这有帮助。
答案 1 :(得分:0)