1. 初始化蓝牙适配器
任务说明
本案例实现Android蓝牙适配器的获取与初始化流程,核心目标为:检测设备是否支持蓝牙、获取BluetoothAdapter实例、检查蓝牙当前是否已启用,并为后续蓝牙操作(如扫描、连接)建立可复用的初始化基础。代码将封装为独立的初始化工具类,可直接在Activity或Service中调用。
核心实现
// BluetoothInitializer.java
package com.example.btinit;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothManager;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.util.Log;
public class BluetoothInitializer {
private static final String TAG = "BT_Init";
private final Context context;
private BluetoothAdapter bluetoothAdapter;
public BluetoothInitializer(Context context) {
this.context = context.getApplicationContext();
}
/**
* 获取蓝牙适配器,若设备不支持蓝牙则返回null
*/
public BluetoothAdapter getAdapter() {
if (bluetoothAdapter != null) {
return bluetoothAdapter;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
// Android 4.3+ 通过BluetoothManager获取
BluetoothManager manager = (BluetoothManager) context
.getSystemService(Context.BLUETOOTH_SERVICE);
if (manager != null) {
bluetoothAdapter = manager.getAdapter();
}
} else {
// 旧版本直接获取默认适配器
bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
}
if (bluetoothAdapter == null) {
Log.e(TAG, "设备不支持蓝牙");
}
return bluetoothAdapter;
}
/**
* 检查蓝牙是否已启用
*/
public boolean isBluetoothEnabled() {
BluetoothAdapter adapter = getAdapter();
return adapter != null && adapter.isEnabled();
}
/**
* 发起系统蓝牙启用请求(需在Activity中调用)
* @return 是否需要发起启用请求(false表示已启用或设备不支持)
*/
public boolean requestEnableIfNeeded() {
BluetoothAdapter adapter = getAdapter();
if (adapter == null) {
return false;
}
if (!adapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
enableBtIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(enableBtIntent);
return true;
}
return false;
}
}
调用示例
// MainActivity.java 中调用
BluetoothInitializer btInit = new BluetoothInitializer(this);
BluetoothAdapter adapter = btInit.getAdapter();
if (adapter == null) {
// 设备不支持蓝牙,终止后续操作
return;
}
if (!btInit.isBluetoothEnabled()) {
// 蓝牙未启用,弹出系统启用对话框
btInit.requestEnableIfNeeded();
} else {
// 蓝牙已就绪,可进行后续扫描/连接操作
Log.d("BT_Init", "蓝牙已启用,地址: " + adapter.getAddress());
}
AndroidManifest权限声明
<!-- 蓝牙相关权限 -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<!-- Android 12+ 需要BLUETOOTH_CONNECT权限 -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<!-- 声明设备支持蓝牙(可选) -->
<uses-feature android:name="android.hardware.bluetooth" android:required="true" />
验证方法
运行步骤:
- 在Android Studio中创建新工程,将
BluetoothInitializer.java放入项目源码目录; - 在
MainActivity的onCreate中调用上述示例代码; - 在AndroidManifest.xml中添加上述权限声明;
- 连接真机(蓝牙功能正常)运行应用。
判定标准:
- 设备支持蓝牙时,Logcat输出
BT_Init: 蓝牙已启用,地址: XX:XX:XX:XX:XX:XX(或弹出系统蓝牙启用对话框); - 关闭系统蓝牙后再次运行,应弹出系统蓝牙启用请求对话框;
- 在无蓝牙模拟器上运行,Logcat输出
设备不支持蓝牙,且无崩溃。
关键说明
- Android 12+适配:若targetSdkVersion ≥ 31,还需在运行时申请
BLUETOOTH_CONNECT权限,否则getAdapter()可能返回null或抛出SecurityException; - 生命周期:
requestEnableIfNeeded()会启动系统Activity,建议在Activity中调用并处理onActivityResult回调以确认用户选择; - 线程限制:本工具类方法均应在主线程调用,蓝牙操作(如扫描)需另开线程。