SDK_APP/蓝牙权限配置指南.md

178 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 蓝牙权限配置完整指南
## 📋 权限配置概述
本应用已配置完整的蓝牙权限支持,包括:
- **Android 11及以下**:需要位置权限进行蓝牙扫描
- **Android 12+**:使用新的蓝牙权限模型,无需位置权限
## 🔧 AndroidManifest.xml 配置
### 基础蓝牙权限
```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及以下需要
```xml
<!-- 位置权限 (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+ 特殊配置
```xml
<!-- Android 12+ 蓝牙扫描权限 (不用于定位) -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
android:usesPermissionFlags="neverForLocation" />
```
## 📱 运行时权限请求
### 动态权限检查
应用会根据Android版本自动确定所需权限
```kotlin
// 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. 权限被拒绝
**症状**: 扫描无结果,显示"权限被拒绝"
**解决方案**:
1. 进入应用设置 → 权限
2. 手动开启蓝牙和位置权限
3. 重启应用
### 2. Android 12+ 权限问题
**症状**: 新设备上扫描失败
**解决方案**:
1. 确保使用新的蓝牙权限
2. 检查`neverForLocation`标志
3. 确认权限已正确授予
### 3. 位置权限问题
**症状**: Android 11及以下设备扫描失败
**解决方案**:
1. 确保位置权限已授予
2. 检查GPS是否开启某些厂商系统需要
3. 重启蓝牙服务
## 📊 权限状态检查
### 应用内权限状态显示
```
权限状态:
BLUETOOTH_SCAN: ✓
BLUETOOTH_CONNECT: ✓
ACCESS_FINE_LOCATION: ✓
ACCESS_COARSE_LOCATION: ✓
```
### 系统设置检查
1. **设置 → 应用 → 本应用 → 权限**
2. **设置 → 隐私 → 位置信息**
3. **设置 → 蓝牙**
## 🛠️ 调试权限问题
### 1. 检查权限声明
```bash
# 确认AndroidManifest.xml中的权限声明正确
# 检查maxSdkVersion和usesPermissionFlags
```
### 2. 检查运行时权限
```kotlin
// 在代码中检查权限状态
ContextCompat.checkSelfPermission(context, permission)
```
### 3. 查看权限请求结果
```kotlin
// 在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`
1. **确认设备Android版本**
2. **检查对应权限是否已授予**
3. **验证权限配置是否正确**
4. **测试扫描功能是否正常**
## 🚀 下一步操作
1. **重新编译应用**
2. **在目标设备上测试权限**
3. **确认权限授予后扫描正常**
4. **如果仍有问题,检查设备特定设置**