检测“蓝牙扫描定位”是否已打开

7
自从Android M版本以后,即使全局位置关闭了,如果您已经在位置设置中启用了蓝牙扫描选项,也可以在后台扫描蓝牙设备(见屏幕截图)。
为了扫描BLE设备,必须满足以下条件:
  • 已授予COARSE_LOCATIONFINE_LOCATION权限。
并满足以下条件之一:
  • 启用了全局位置选择器。
  • 启用了蓝牙扫描选项(见屏幕截图)。
我可以检查权限是否被授予以及位置选择器的状态。但我还没有能够找出如何检查蓝牙扫描选项的状态? 非常感谢您的任何见解!
屏幕截图: Marshmallow Bluetooth Scanning Option

我对如何检测状态也非常感兴趣。因为当它被打开时,我们的BLE连接会在某些设备上出现问题... - mbo
1个回答

6

经过大量的搜索,我终于找到了一种了解状态的方法:

try {
    ContentResolver resolver = getApplicationContext().getContentResolver();
    int result = Settings.Global.getInt(resolver,"ble_scan_always_enabled");
    if(result == 1) {
        // Bluetooth scanning is on
    } else {
        // Bluetooth scanning is off
    }
} catch(SettingNotFoundException e) {
    // Settings doesn't exist, on Android < 6
}

您可以使用"wifi_scan_always_enabled"来获取wifi扫描状态。它不需要任何权限。

如果我找到了重定向用户到屏幕或禁用它的方法,我会更新这篇文章。


在安卓 Q 上对我不起作用。找不到 "ble_scan_always_enabled"。 - apex39
1
@apex39,你也可以使用“WifiManager.isScanAlwaysAvailable()”来获取WiFi扫描状态。 - wangqi060934
对于遇到“SettingNotFoundException”的人-请尝试在设置中切换WiFi和蓝牙扫描的开/关状态,然后再次运行您的代码。 - Tomy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接