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" />

验证方法

运行步骤:

  1. 在Android Studio中创建新工程,将BluetoothInitializer.java放入项目源码目录;
  2. 在MainActivity的onCreate中调用上述示例代码;
  3. 在AndroidManifest.xml中添加上述权限声明;
  4. 连接真机(蓝牙功能正常)运行应用。

判定标准:

  • 设备支持蓝牙时,Logcat输出BT_Init: 蓝牙已启用,地址: XX:XX:XX:XX:XX:XX(或弹出系统蓝牙启用对话框);
  • 关闭系统蓝牙后再次运行,应弹出系统蓝牙启用请求对话框;
  • 在无蓝牙模拟器上运行,Logcat输出设备不支持蓝牙,且无崩溃。
蓝牙适配器初始化流程 MainActivity 调用方 BluetoothInitializer 初始化工具类 BluetoothManager 系统服务 BluetoothAdapter 适配器 getAdapter() getSystemService getAdapter() 初始化后状态检查 adapter == null? 是 设备不支持蓝牙 终止操作 否 isEnabled() == true? 是 → 蓝牙就绪,可进行扫描/连接 否 请求系统启用蓝牙 ACTION_REQUEST_ENABLE

关键说明

  • Android 12+适配:若targetSdkVersion ≥ 31,还需在运行时申请BLUETOOTH_CONNECT权限,否则getAdapter()可能返回null或抛出SecurityException;
  • 生命周期:requestEnableIfNeeded()会启动系统Activity,建议在Activity中调用并处理onActivityResult回调以确认用户选择;
  • 线程限制:本工具类方法均应在主线程调用,蓝牙操作(如扫描)需另开线程。