在Android应用中请求蓝牙权限需要遵循以下步骤,结合了运行时权限机制和蓝牙功能配置:
一、基础配置
添加权限声明 在`AndroidManifest.xml`文件中添加蓝牙相关权限:
```xml
```
其中,`BLUETOOTH`用于基础蓝牙功能,`BLUETOOTH_ADMIN`用于管理蓝牙设备(如配对、连接等高级操作)。
检查设备兼容性
使用`BluetoothAdapter`类判断设备是否支持蓝牙:
```java
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) {
// 设备不支持蓝牙
return;
}
if (!bluetoothAdapter.isEnabled()) {
// 提示用户开启蓝牙
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
```
对于Android 6.0及以上版本,需动态申请权限。
二、动态权限申请流程
检查权限状态
使用`ContextCompat.checkSelfPermission`判断是否已授予`BLUETOOTH`权限:
```java
if (ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH)
!= PackageManager.PERMISSION_GRANTED) {
// 权限未授予
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.BLUETOOTH},
REQUEST_BLUETOOTH_PERMISSION);
} else {
// 权限已授予,可进行后续操作
}
```
其中`REQUEST_BLUETOOTH_PERMISSION`是自定义请求码(如1)。
处理权限结果
在`onRequestPermissionsResult`回调中处理用户响应:
```java
@Override
public void onRequestPermissionsResult(int requestCode,
@NonNull String[] permissions,
@NonNull int[] grantResults) {
if (requestCode == REQUEST_BLUETOOTH_PERMISSION) {
if (grantResults.length > 0
&& grantResults == PackageManager.PERMISSION_GRANTED) {
// 权限授予成功
} else {
// 权限被拒绝
}
}
}
```
三、蓝牙功能实现
开启蓝牙
若用户未手动开启蓝牙,需通过系统对话框请求开启:
```java
if (!bluetoothAdapter.isEnabled()) {
startActivityForResult(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE), REQUEST_ENABLE_BT);
}
```
搜索与配对设备
使用`BluetoothAdapter`搜索附近设备并完成配对:
```java
Set for (BluetoothDevice device : pairedDevices) { if (device.getName().equals("目标设备名称")) { try { bluetoothAdapter.createRfcommSocketToServiceRecord(MY_UUID, device); // 进一步建立连接 } catch (IOException e) { e.printStackTrace(); } } } ``` 其中`MY_UUID`是服务UUID,需提前配对设备时设置。 数据传输 通过`BluetoothSocket`进行数据读写操作,传输完成后关闭连接: ```java BluetoothSocket socket = ...; // 已建立的连接 InputStream input = socket.getInputStream(); OutputStream output = socket.getOutputStream(); // 读写数据 socket.close(); ``` 注意事项 权限分级管理: 部分高级蓝牙操作(如扫描、连接)需在`AndroidManifest.xml`中声明,并在运行时动态申请权限。 设备兼容性检查 用户体验优化:建议在应用启动时检查蓝牙状态,并引导用户完成必要配置,避免频繁弹出权限请求。 通过以上步骤,可安全地在Android应用中请求并使用蓝牙功能。