近期遇到一个问题,之前发布的APP连接蓝牙都是正常的,现在有人反映连不上了。经过测试发现:android 12 和 harmonyOS 3.0.0 都会有这个问题,而之前的版本就不会有这个。

经过网上一番查找,原来是因为最近Google发布的Android 12,新引入了 BLUETOOTH_SCAN、BLUETOOTH_CONNECT、BLUETOOTH_ADVERTISE 三个权限。、

从Android 12开始,过去的蓝牙权限被拆分成了3个新的权限,并且全都是运行时权限(需要动态申请):

  • BLUETOOTH_SCAN 用于使用蓝牙扫描附件其他的蓝牙设备
  • BLUETOOTH_ADVERTISE 用于允许当前的设备被其他的蓝牙设备所发现
  • BLUETOOTH_CONNECT 用于连接之前已经配对过的蓝牙设备

这3个权限都是从Android 12系统才开始有的,所以为了能够兼容过去的老版本,建议在AndroidManifest.xml中这样声明:

    <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" /><uses-permission android:name="android.permission.BLUETOOTH_ADMIN"  android:maxSdkVersion="30"/><uses-permission android:name="android.permission.BLUETOOTH_SCAN" /><uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" /><uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

新增的3个蓝牙权限都是运行时权限,因此只在AndroidManifest.xml中声明是没有用的,还要在代码中动态申请权限才行。必须先在应用中用户明确批准使用,然后才能查找蓝牙设备、使某个设备可被其他设备检测到,或者与已配对的蓝牙设备通信。

具体的申请方法如下:首先要判断当前的系统版本,只有当Android 12及以上系统时,才应该去请求新增的蓝牙权限。(PS:3个权限都属于同一个权限组,因此理论上只要申请一个权限,另外2个也就自动授权了。)

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {String[] permission = checkSelfPermissionArray(this, new String[]{Manifest.permission.BLUETOOTH_SCAN,Manifest.permission.BLUETOOTH_ADVERTISE,Manifest.permission.BLUETOOTH_CONNECT});if (permission.length > 0) {ActivityCompat.requestPermissions(this, permission, 102);}}

注意:

之前的Android系统中有一个很奇怪的现象,当我们在应用中使用蓝牙扫描附件设备的时候,需要申请地理位置权限蓝牙权限并不是运行时权限,但地理位置权限却是

Android连接蓝牙设备问题(android.permission.BLUETOOTH)相关推荐

  1. android连接雷电模拟器,android studio连接雷电模拟器 【AS 模拟器】

    Android studio 怎么连接安卓模拟器呢,跟着下面的步骤即可 (以雷电模拟器为例,其他模拟器类似) 一.下载模拟器 下载安装完雷电模拟器,打开并进入如下页面 二.模拟器进入开发者选项,勾选u ...

  2. android+连接相机,关于Android连接单反相机

    ------------------ 原始邮件 ------------------ 发件人: "Whatder" 发送时间: 2020年9月27日(星期天) 晚上6:59 收件人 ...

  3. android 连接蓝牙音响,Android 扫描附近的蓝牙设备并连接蓝牙音响的示例

    Android 扫描附近的蓝牙设备并连接蓝牙音响的示例 发布时间:2020-09-10 04:30:39 来源:脚本之家 阅读:111 作者:叶应是叶 写了一个可以扫描附近蓝牙设备的小Demo,可以查 ...

  4. android没有蓝牙设备,【Android】没有触发LeScanCallback导致无法搜索到蓝牙设备

    在Android6.0以上,部分机型需要开启定位权限,部分机型需要同时开启GPS.所以使用蓝牙之前,需要动态申请定位权限,或者直接将targetSdkVersion设置为23以下. 需要在Androi ...

  5. android连接酒店wifi,Android 在APP内、应用内 连接WiFi

    Android 在应用内连接特定的WiFi 首先需要在AndroidManifext.xml中添加以下权限 通过如下代码,可以实现连接到这个ssid的WiFi String ssid = " ...

  6. android连接otg摄像头,Android系统OTG_usb链接摄像头的驱动和使用

    这段时间做一个Android项目,需要在一台Android 4.4.4系统设备上链接usb摄像头,用作人脸识别, 于是作为Android项目组"骨干"(哈哈臭屁一下^-^)的我开始 ...

  7. android检测蓝牙设备连接不上,Android检查设备连接状态

    遇到一个检查蓝牙设备连接状态问题,困扰许久.在网上查询良久,尝试了多种方案,也没有很好的解决,最终经"高人指点",小有所获,在此小记. 网上查询的主要方法为以下两种: 1.getP ...

  8. Android蓝牙无法通信,android.bluetooth.BluetoothSocket无法连接

    我已经尝试了其他评论中的所有建议,但都没有效果,我希望有人能帮助我.我已经为这个问题挣扎了三天了.我确信我的uuid是正确的,并且我知道清单中启用了蓝牙访问. 我正在尝试将我的android应用程序连 ...

  9. Android蓝牙开发教程(二)——连接蓝牙设备

    在上一篇中已经介绍如何搜索附近可连接的蓝牙设备,如果你还没阅读过,建议先看看上一篇文章Android蓝牙开发教程(一)--搜索蓝牙设备 获取到设备后就可以开始处理蓝牙设备之间的连接. 在上一篇教程中我 ...

最新文章

  1. sql server死锁的查询和解除
  2. 分治法——巨人与鬼问题
  3. 章琦:能坚持的唯一的原因就是兴趣
  4. Selenium 中文API
  5. 批量实现ssh免交互认证
  6. c++实现双向链表操作
  7. jQuery.Validate验证库
  8. de4dot 反混淆工具使用
  9. 台式计算机开关电源原理图,计算机开关电源基本结构及原理
  10. 单片机炫彩灯实训报告_单片机跑马灯实验报告
  11. 电脑连接android手机测试,关于如何将手机画面投屏到PC的测试(Android)
  12. Xdebug中文文档-基础特性
  13. 朱善利《微观经济学》第3版课后习题答案
  14. 微信小程序使用真机或开发工具进行http请求开发测试亲测有效
  15. 【控制理论】滑模控制最强解析
  16. linux 同一个交换机 不通,同一个交换机 局域网内 内网IP ping不通为什么 没关闭windows防火墙...
  17. python爬虫知乎图片_python 爬取知乎图片
  18. 如何用css3做一个旋转的魔方
  19. html怎么把文字居中6,html5怎么把文字居中
  20. 服务器部署位置怎么找,服务器部署位置

热门文章

  1. Google安全视频
  2. PlantUML Themes
  3. 年薪30万软件测试这一岗位究竟每天都干什么?
  4. 如何用敏捷搞垮团队?[视频版]
  5. php正则 字符串转数组,jquery字符串转数组split正则匹配
  6. 集美大学计算机毕业论文,咨询关于集美大学毕业论文检测的问题
  7. 自定义WhatsUp监控 1
  8. android意图相机代码,Android从相机获取图像Uri
  9. 【游戏开发引擎】实验4:Gauntlet Runner 3D 赛跑游戏
  10. 【浅学数据结构】算法概念篇