android - 从 Settings Api 获取 Needle 不适用于 API 23

标签 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 状态。

最佳答案

API 23 中的定位服务有一个扫描设置面板。

location

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

scanning

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

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

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

关于android - 从 Settings Api 获取 Needle 不适用于 API 23,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35709420/

相关文章:

java - 如果重新创建 Activity ,Android显示对话框会导致非法状态异常

python - 接口(interface) "DefaultAdapter"上带有签名 ""的方法 "org.bluez.Manager"在树莓派 3 中不存在

android - 找不到包名称 'demo.abc.com.deals.debug' 的匹配客户端

android - 共享元素转换后 Activity 中的内存泄漏进入转换协调器

java - 软键盘上的 Enter 键按下时不会触发事件

android - AndEngine - SpriteGroup 在新的 attachChild 上闪烁

android - 如何检测连接的蓝牙外围设备(自拍杆)的点击事件?

android - listenUsingRfcommWithServiceRecord(字符串名称,UUID uuid)不工作

android - 为什么我不能在 android studio 中使用 andengine 显示 admob 奖励视频广告?

android - 如何解决 getBuyIntent 上的 PurchaseError{type=3 subtype=0}