Android连接蓝牙设备问题(android.permission.BLUETOOTH)
2023-04-18 14:22:18 时间
近期遇到一个问题,之前发布的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系统中有一个很奇怪的现象,当我们在应用中使用蓝牙扫描附件设备的时候,需要申请地理位置权限。蓝牙权限并不是运行时权限,但地理位置权限却是。
相关文章
- 微软发出警告:iOS 和 Android 端 Cortana 将在 3 月 31 日停止支持
- 如何用Hadoop搭建大型分布式应用?
- Hadoop是一个值得信赖的推动引擎
- 从数据到决策 大连农行DB2商业智能系统的开发应用
- Windows 10邮件应用加入更多新广告
- 实在太神奇!Windows10这些黑科技小功能你都用过吗
- 十月第4周新闻回顾:Android 4.0亮爆眼球 微软与Hadoop
- 如何用Hadoop搭建大型分布式应用
- 重大改变,微软 Windows 10 记事本获得新图标 Logo:将通过应用商店独立更新
- 未来SaaS的发展需要商业智能支持
- 基于云的商业智能可以快速投入实用
- 机械制造业如何玩转商业智能
- 哈哈哈哈哈哈…发现微信一个bug!有点好玩~
- Windows 10 21H1确认:经典版Edge被遗弃、不会更新
- DB2 数据仓库技术的正确应用与概念
- 微软 Surface Duo 2 预计今年晚些时候发布,系统软件大升级
- Teradata与Maybank数据仓库驱动型分析应用表现优异
- 微软正在改变 Edge 浏览器 macOS 版更新方式:更及时快速
- Hadoop简介:Hadoop的应用场合及其核心设计
- 更纯净,微软 Windows10 21H2 重大更新将减少系统臃肿软件数量