Android 低功耗蓝牙广播实现指南

在如今的物联网时代,低功耗蓝牙(Bluetooth Low Energy,BLE)被广泛运用于各种设备的通讯中。如果你是一个刚入行的开发者,今天我将教你如何在Android上实现低功耗蓝牙广播。我们将一步一步地进行,确保你能理解每个过程。

流程概述

以下是实现低功耗蓝牙广播的基本流程:

步骤 描述
1 配置权限和Manifest文件
2 初始化BluetoothAdapter
3 创建Broadcast数据
4 开始广播
5 停止广播及资源清理

步骤详细说明

1. 配置权限和Manifest文件

首先,你需要在项目的AndroidManifest.xml文件中声明必要的权限。

<manifest xmlns:android="
    package="com.example.blebroadcast">

    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    
    <application
        ... >
        ...
    </application>
</manifest>
  • BLUETOOTH:用于控制蓝牙
  • BLUETOOTH_ADMIN:用于管理蓝牙设备
  • ACCESS_FINE_LOCATION:Android 6.0开始需要定位权限来搜索BLE设备

2. 初始化BluetoothAdapter

在你的Activity或Service中,获取BluetoothAdapter并检查蓝牙是否可用。

BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter();

if (bluetoothAdapter == null || !bluetoothAdapter.isEnabled()) {
    // 蓝牙不可用,提示用户打开蓝牙
    Toast.makeText(this, "请打开蓝牙", Toast.LENGTH_SHORT).show();
}
  • BluetoothManager:管理蓝牙的类
  • BluetoothAdapter:代表本地蓝牙适配器

3. 创建Broadcast数据

设置要广播的数据,包括服务UUID等信息。

BluetoothLeAdvertiser advertiser = bluetoothAdapter.getBluetoothLeAdvertiser();
ParcelUuid pUuid = new ParcelUuid(UUID.fromString("0000180D-0000-1000-8000-00805f9b34fb"));

AdvertiseSettings settings = new AdvertiseSettings.Builder()
        .setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_POWER)
        .setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_LOW)
        .setConnectable(false)
        .build();

AdvertiseData data = new AdvertiseData.Builder()
        .addServiceUuid(pUuid)
        .setIncludeDeviceName(true)
        .build();
  • BluetoothLeAdvertiser:用于广播BLE数据
  • AdvertiseSettings:设置广播的模式和功率
  • AdvertiseData:广播数据的构造

4. 开始广播

调用startAdvertising()方法开启广播。

advertiser.startAdvertising(settings, data, new AdvertiseCallback() {
    @Override
    public void onStartSuccess(AdvertiseSettings settingsInEffect) {
        super.onStartSuccess(settingsInEffect);
        Log.i("BLE", "广播成功");
    }

    @Override
    public void onStartFailure(int errorCode) {
        super.onStartFailure(errorCode);
        Log.e("BLE", "广播失败: " + errorCode);
    }
});
  • 使用AdvertiseCallback来监控广播的状态

5. 停止广播及资源清理

当不需要广播时,记得停止并释放资源。

advertiser.stopAdvertising(new AdvertiseCallback() {
    @Override
    public void onStopSuccess() {
        super.onStopSuccess();
        Log.i("BLE", "停止广播成功");
    }

    @Override
    public void onStopFailure(int errorCode) {
        super.onStopFailure(errorCode);
        Log.e("BLE", "停止广播失败: " + errorCode);
    }
});

序列图

以下是BLE广播的调用序列图:

sequenceDiagram
    participant A as User
    participant B as App
    participant C as Bluetooth

    A->>B: Open App
    B->>C: check Bluetooth status
    C->>B: Bluetooth is enabled
    B->>C: Start Advertising
    C-->>B: Advertising Started
    B->>A: Show "Broadcasting"
    A->>B: Close App
    B->>C: Stop Advertising
    C-->>B: Advertising Stopped

结尾

通过以上步骤,你应该已经掌握了在Android中实现BLE广播的基本流程。记得在开发时关注蓝牙权限设置以及设备兼容性问题。希望这篇文章对你有所帮助,祝你的开发旅程顺利!