4.7 KiB
4.7 KiB
蓝牙权限配置完整指南
📋 权限配置概述
本应用已配置完整的蓝牙权限支持,包括:
- Android 11及以下:需要位置权限进行蓝牙扫描
- Android 12+:使用新的蓝牙权限模型,无需位置权限
🔧 AndroidManifest.xml 配置
基础蓝牙权限
<!-- 基础蓝牙权限 (Android 11及以下) -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<!-- Android 12+ 新蓝牙权限 -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
位置权限(仅Android 11及以下需要)
<!-- 位置权限 (Android 11及以下需要) -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"
android:maxSdkVersion="30" />
Android 12+ 特殊配置
<!-- Android 12+ 蓝牙扫描权限 (不用于定位) -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
android:usesPermissionFlags="neverForLocation" />
📱 运行时权限请求
动态权限检查
应用会根据Android版本自动确定所需权限:
// Android 12+ 使用新的蓝牙权限
private val REQUIRED_PERMISSIONS: Array<String> = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
arrayOf(
Manifest.permission.BLUETOOTH_SCAN,
Manifest.permission.BLUETOOTH_CONNECT
)
} else {
// Android 11及以下需要位置权限
arrayOf(
Manifest.permission.BLUETOOTH_SCAN,
Manifest.permission.BLUETOOTH_CONNECT,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
)
}
权限状态显示
应用会显示详细的权限状态:
- ✅ 已授予权限
- ❌ 缺少权限
- 💡 权限请求提示
🔍 权限检查流程
1. 应用启动时检查
- 显示当前权限状态
- 提示用户授予必要权限
2. 蓝牙操作前检查
- 自动检查所需权限
- 如果缺少权限,自动请求
- 显示权限请求结果
3. 权限结果处理
- 显示已授予和被拒绝的权限
- 提供手动设置指导
- 根据权限状态决定是否继续操作
🚨 常见权限问题
1. 权限被拒绝
症状: 扫描无结果,显示"权限被拒绝" 解决方案:
- 进入应用设置 → 权限
- 手动开启蓝牙和位置权限
- 重启应用
2. Android 12+ 权限问题
症状: 新设备上扫描失败 解决方案:
- 确保使用新的蓝牙权限
- 检查
neverForLocation标志 - 确认权限已正确授予
3. 位置权限问题
症状: Android 11及以下设备扫描失败 解决方案:
- 确保位置权限已授予
- 检查GPS是否开启(某些厂商系统需要)
- 重启蓝牙服务
📊 权限状态检查
应用内权限状态显示
权限状态:
BLUETOOTH_SCAN: ✓
BLUETOOTH_CONNECT: ✓
ACCESS_FINE_LOCATION: ✓
ACCESS_COARSE_LOCATION: ✓
系统设置检查
- 设置 → 应用 → 本应用 → 权限
- 设置 → 隐私 → 位置信息
- 设置 → 蓝牙
🛠️ 调试权限问题
1. 检查权限声明
# 确认AndroidManifest.xml中的权限声明正确
# 检查maxSdkVersion和usesPermissionFlags
2. 检查运行时权限
// 在代码中检查权限状态
ContextCompat.checkSelfPermission(context, permission)
3. 查看权限请求结果
// 在onRequestPermissionsResult中处理结果
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray)
📝 权限配置清单
AndroidManifest.xml 检查项
- 基础蓝牙权限已声明
- Android 12+ 新权限已声明
- 位置权限限制到Android 11及以下
neverForLocation标志已设置- 蓝牙功能特性已声明
代码权限检查项
- 动态权限检查已实现
- 权限请求已处理
- 权限结果已处理
- 权限状态显示已实现
测试检查项
- Android 11及以下设备测试通过
- Android 12+ 设备测试通过
- 权限拒绝场景测试通过
- 权限授予后功能正常
🎯 针对目标设备的权限检查
目标设备: A4:C3:37:86:9F:73
- 确认设备Android版本
- 检查对应权限是否已授予
- 验证权限配置是否正确
- 测试扫描功能是否正常
🚀 下一步操作
- 重新编译应用
- 在目标设备上测试权限
- 确认权限授予后扫描正常
- 如果仍有问题,检查设备特定设置