一、问题描述

最近在做蓝牙相关的项目,用 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 的设备上扫描蓝牙除了需要

这两个权限外,还需要

这两个其中之一,当然两个都加也行,就可以扫描出对设备可见的蓝牙了,当然还得要允许权限才行,毕竟 Android 6.0 开始加入了权限控制功能。

更多相关文章

  1. Android(安卓)studio 关于SQlite数据库导出,创建数据库、表以及如
  2. 基于安卓手持设备的手机应用编程——用户界面
  3. Android(安卓)Camera HAL3 - Multi Camera(1)
  4. Android(安卓)蓝牙开发(九)A2DP基本功能
  5. ubuntu连接android设备(附最简单方法)
  6. Android输入系统(三):加载按键映射
  7. Android的NDK开发(5)————Android(安卓)JNI层实现文件的read
  8. Android蓝牙开发(一)蓝牙模块及核心API
  9. Android真机网络adb联机调试初探

随机推荐

  1. Android(安卓)Media Scanner Mechanism A
  2. 在android中玩转wcf
  3. android中操纵sqlite数据库
  4. Android(安卓)studio maven pom.xml
  5. Android: ADB网络调试
  6. android property system
  7. android的ListView显示
  8. Android(安卓)4G驱动移植流程
  9. android SQLite数据库使用实例
  10. android 电话录音