近期遇到一个问题,之前发布的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. python创建数组并运行,python中Numpy的数组创建
  2. 标题在图表上_从零开始学Excel——标题和图例的设置(143)
  3. oracle每小时分组查询,Oracle 天内按小时分组查询有关问题
  4. 在 linux 下使用 CMake 构建应用程序
  5. Java集合—List如何一边遍历,一边删除?
  6. shiro学习(20): 自定义过滤规则
  7. Idea 创建简单的SpringBoot 父子项目
  8. linux安装nvidia驱动+cuda10.0+cudnn7.4.2
  9. BZOJ 2434 阿狸的打字机(ac自动机+dfs序+树状数组)
  10. 【FPGA】TestBench中关于@eachvec
  11. 禾川x3e系列_禾川科技:“高性价比”X3E系列伺服系统能否摘得金球奖桂冠?
  12. 矩阵键盘mega16 c语言程序,矩阵键盘实现16个按键操作原理及应该方案
  13. jdk10和jdk8共存和快速切换
  14. zuc算法代码详解_ZUC算法-信息安全工程师知识点
  15. mysql双机热备份windows_window下使用mysql双机热备份
  16. Springboot 前后端交互 Long类型传输 前端获取数据受限
  17. 一个中东外贸业务员分享的干货
  18. 【JavaScript】DOM编程-DHTML与Windows对象
  19. 算法图解 第7章 狄克斯特拉算法
  20. 14福师计算机导论在线作业一,(随机)福师18秋《计算机导论》在线作业一资料...

热门文章

  1. CSS--媒体查询是什么
  2. 产业互联网下半场,SaaS平台的机遇与挑战
  3. 对于缠论的编排和解读过程
  4. Failed to load build-tools\xx\lib\dx.jar的解决方式
  5. LLVM是如何编译指令的
  6. 迷宫问题(搜索+回溯)
  7. 计算机专业群名有内涵,有创意的寝室群名字 好听有内涵的寝室名称
  8. listview嵌套listview
  9. 高性能ARM SOC 核心板标准(SMARC2.1)简介
  10. Arduino开发实例-多机CAN-Bus通信(基于MCP2515)