使用 Android Studio 获取 BLE 广播包

引言

Bluetooth Low Energy(BLE)是一种低功耗的蓝牙技术,广泛应用于物联网设备、健康监测器、智能家居等领域。在Android应用中,开发者经常需要获取BLE广播包,以便与周围的BLE设备进行通信。本文将详细介绍如何使用Android Studio获取BLE广播包,并提供相应的代码示例。

BLE 广播包基础

BLE广播是一些BLE设备周期性发送的消息,包含了设备的信息。BLE设备可以通过广播包向多个接收端发送信息,这些信息通常包括设备名称、UUID、服务等。

广播包组成

BLE 广播包通常包含以下几个部分:

字段 描述
AD Structs 广播数据的类型和长度
Flags 表示设备的功能和状态
Name 设备名称
Service UUID 设备所提供服务的UUID

环境准备

在开始编码之前,请确保您已经安装了以下工具:

  1. [Android Studio](
  2. Android SDK 和 NDK

当准备好后,我们将创建一个新的Android项目,用于接收和解析BLE广播包。

创建一个新的 Android 项目

  1. 打开 Android Studio,选择 “New Project”。
  2. 选择 “Empty Activity”,点击 “Next”。
  3. 配置项目名称,选择适合的包名和保存位置,点击 “Finish”。

配置权限

AndroidManifest.xml中,添加BLE相关的权限:

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

    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

    <application
        ...>
        ...
    </application>
</manifest>

实现 BLE 广播包扫描

我们将编写代码以实现BLE广播扫描功能。以下是完整的实现步骤:

  1. 初始化 BLE 适配器
  2. 启动 BLE 扫描
  3. 处理扫描结果

MainActivity.java 中,添加以下代码:

import android.Manifest;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothManager;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import java.util.Arrays;

public class MainActivity extends AppCompatActivity {
    private static final int REQUEST_ENABLE_BT = 1;
    private BluetoothAdapter bluetoothAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 初始化BLE适配器
        BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
        bluetoothAdapter = bluetoothManager.getAdapter();

        // 检查蓝牙权限
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH) != PackageManager.PERMISSION_GRANTED ||
                ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                
                ActivityCompat.requestPermissions(this, new String[]{
                        Manifest.permission.BLUETOOTH,
                        Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_ENABLE_BT);
            } else {
                scanForBLEDevices();
            }
        } else {
            scanForBLEDevices();
        }
    }

    private void scanForBLEDevices() {
        bluetoothAdapter.startLeScan((device, rssi, scanRecord) -> {
            String deviceName = device.getName();
            String deviceAddress = device.getAddress();
            byte[] rawData = scanRecord;

            if (deviceName != null) {
                Log.d("BLE", "Found device: " + deviceName + " [" + deviceAddress + "]");
                Log.d("BLE", "Raw data: " + Arrays.toString(rawData));
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (bluetoothAdapter != null) {
            bluetoothAdapter.stopLeScan(null);
        }
    }
}

代码解析

  • 初始化BLE适配器:我们通过BluetoothManager获取BluetoothAdapter。
  • 检查权限:在安卓6.0以上,需要动态申请BLE相关权限。
  • 扫描BLE设备:调用startLeScan()方法开始扫描设备,并提供设备的回调处理。
  • 处理扫描结果:在回调中,我们打印设备名称、地址和扫描记录的原始数据。

序列图

下面是BLE广播包扫描过程的序列图示例:

sequenceDiagram
    participant User
    participant MainActivity
    participant BluetoothManager
    participant BluetoothAdapter

    User->>MainActivity: 启动应用
    MainActivity->>BluetoothManager: 获取BluetoothAdapter
    BluetoothManager->>BluetoothAdapter: 返回Adapter
    MainActivity->>User: 请求权限
    User->>MainActivity: 确认权限
    MainActivity->>BluetoothAdapter: 开始扫描BLE设备
    BluetoothAdapter->>MainActivity: 返回扫描结果
    MainActivity->>MainActivity: 处理扫描数据

结尾

通过上述的实现步骤,我们成功地在Android Studio中使用Bluetooth Low Energy(BLE)技术获取了BLE广播包。在实际应用中,BLE已经成为一个不可或缺的部分,具有广泛的应用前景。希望本文能为您在BLE开发的旅程中提供一些帮助。

同时,了解BLE的广播包和相关概念,不仅可以帮助您更好地理解BLE设备的工作原理,也能让您在今后的项目中更加游刃有余。如果您有任何问题或建议,请随时与我们分享。