来自SettingsApi的setNeedBle无法处理API23

时间:2016-02-29 20:53:29

标签: android bluetooth google-play-services

我正在使用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状态。

2 个答案:

答案 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)

API 23中的位置服务具有扫描设置面板。

location

有Wifi和蓝牙扫描的切换,以提高定位精度。

scanning

通过切换,即使未启用蓝牙,位置服务也可以使用BLE扫描 。在这种情况下,setNeedBle(true)不会提示用户打开蓝牙,因为位置服务已经可以使用BLE。

但我不知道如何在我们自己的应用程序中提供位置服务中的BLE扫描,也许这是不可能的。

我建议检查请求位置服务后是否启用蓝牙,如果未启用则显示蓝牙启用提示。