Android 6.0 BluetoothAdapter.startDiscovery()扫描不到蓝牙的问题分析及解决
2017-03-26 15:50
696 查看
一、问题描述
最近在做蓝牙相关的项目,用 BluetoothAdapter.startDiscovery() 这个方法在Android 6.0 的机子上扫描不到对设备可见的蓝牙,但在 Android 4.X 的机子却可以扫描出来。
二、问题分析
这有可能是 Android 在 6.0 系统蓝牙方面做了修改,打开BluetoothAdapter.startDiscovery()这个方法官方文档,
可以看到这个方法需要请求 BLUETOOTH_ADMIN 这个权限,但这个权限我已经添加了的,上面有一句话是 Register for ACTION_FOUND to be notified as remote Bluetooth devices are found. 这个 ACTION_FOUND 是用于远程的蓝牙设备被发现时会发出的广播通知,点进去看看,
这个广播要请求两个权限,一个是 BLUETOOTH ,另一个是 ACCESS_COARSE_LOCATION,什么鬼,扫描蓝牙要访问位置的权限,黑人问号????
最后在 Google 官方文档中找到一篇是关于 Android 6.0 系统的变更的文章,有一段是讲硬件标识符访问权的,
可以看到,这是为了给用户提供更严格的数据保护的,这是怎么保护的?这。。。得去问 Google 吧。
三、问题解决
通过上面的分析,我们知道在 Android 6.0 的设备上扫描蓝牙除了需要
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
这两个权限外,还需要
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
或
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
这两个其中之一,当然两个都加也行,就可以扫描出对设备可见的蓝牙了,当然还得要允许权限才行,毕竟 Android 6.0 开始加入了权限控制功能。
最近在做蓝牙相关的项目,用 BluetoothAdapter.startDiscovery() 这个方法在Android 6.0 的机子上扫描不到对设备可见的蓝牙,但在 Android 4.X 的机子却可以扫描出来。
二、问题分析
这有可能是 Android 在 6.0 系统蓝牙方面做了修改,打开BluetoothAdapter.startDiscovery()这个方法官方文档,
可以看到这个方法需要请求 BLUETOOTH_ADMIN 这个权限,但这个权限我已经添加了的,上面有一句话是 Register for ACTION_FOUND to be notified as remote Bluetooth devices are found. 这个 ACTION_FOUND 是用于远程的蓝牙设备被发现时会发出的广播通知,点进去看看,
这个广播要请求两个权限,一个是 BLUETOOTH ,另一个是 ACCESS_COARSE_LOCATION,什么鬼,扫描蓝牙要访问位置的权限,黑人问号????
最后在 Google 官方文档中找到一篇是关于 Android 6.0 系统的变更的文章,有一段是讲硬件标识符访问权的,
可以看到,这是为了给用户提供更严格的数据保护的,这是怎么保护的?这。。。得去问 Google 吧。
三、问题解决
通过上面的分析,我们知道在 Android 6.0 的设备上扫描蓝牙除了需要
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
这两个权限外,还需要
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
或
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
这两个其中之一,当然两个都加也行,就可以扫描出对设备可见的蓝牙了,当然还得要允许权限才行,毕竟 Android 6.0 开始加入了权限控制功能。
相关文章推荐
- Android中BluetoothAdapter.startDiscovery方法搜索蓝牙设备不起作用的解决办法
- Android 6.0 搜索不到附近蓝牙问题解决
- BluetoothAdapter在Android6.0/7.0+以上startDiscovery不能发现蓝牙设备问题
- android6.0 蓝牙搜索不到设备 BluetoothAdapter.getDefaultAdapter().startDiscovery()不起作用
- BluetoothAdapter在Android6.0/7.0+以上startDiscovery不能发现蓝牙设备问题
- 关于Android蓝牙中Service discovery failed问题的解决
- Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析
- android 6.0系统扫不到Ble蓝牙问题
- Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析
- Android之蓝牙startDiscovery()搜索不到设备
- Android M(6.0)扫描不到蓝牙设备的处理办法
- Android M(6.0)扫描不到蓝牙设备的处理办法
- Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析
- android BluetoothAdapter蓝牙BLE扫描总结
- Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析
- Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析
- android BluetoothAdapter无法搜索到蓝牙问题
- Android系统Recovery工作原理之使用update.zip升级过程分析(二)---update.zip差分包问题的解决
- android listview 连续调用 getview问题分析及解决(转)
- Android上的蓝牙通信功能的开发:BluetoothChat例程分析