# 蓝牙权限配置完整指南

## 📋 权限配置概述

本应用已配置完整的蓝牙权限支持，包括：
- **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. **如果仍有问题，检查设备特定设置**
