使用 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 |
环境准备
在开始编码之前,请确保您已经安装了以下工具:
- [Android Studio](
- Android SDK 和 NDK
当准备好后,我们将创建一个新的Android项目,用于接收和解析BLE广播包。
创建一个新的 Android 项目
- 打开 Android Studio,选择 “New Project”。
- 选择 “Empty Activity”,点击 “Next”。
- 配置项目名称,选择适合的包名和保存位置,点击 “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广播扫描功能。以下是完整的实现步骤:
- 初始化 BLE 适配器
- 启动 BLE 扫描
- 处理扫描结果
在 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设备的工作原理,也能让您在今后的项目中更加游刃有余。如果您有任何问题或建议,请随时与我们分享。