蓝牙技术简介
蓝牙(Bluetooth)是一种无线技术标准,旨在实现固定设备、移动设备和楼宇个人域网络之间的短距离数据交换。在Android开发中,蓝牙技术广泛应用于设备间的数据传输、设备控制以及物联网(IoT)应用等领域。
入门篇
1. 蓝牙基础知识
1.1 蓝牙版本
蓝牙技术从1.0版本开始,至今已发展到5.0版本。不同版本的蓝牙在传输速率、功耗、兼容性等方面存在差异。Android 4.3及以上版本支持蓝牙4.0(BLE)和蓝牙4.1,而Android 5.0及以上版本支持蓝牙5.0。
1.2 蓝牙通信模式
蓝牙通信模式主要有两种:SPP(串口通信)和BLE(低功耗蓝牙)。
- SPP:适用于数据传输量大、实时性要求高的场景,如蓝牙打印机、蓝牙鼠标等。
- BLE:适用于低功耗、低数据传输量的场景,如智能手环、智能家居等。
2. Android蓝牙开发环境搭建
2.1 创建Android项目
在Android Studio中创建一个新的项目,选择“Empty Activity”模板。
2.2 添加蓝牙权限
在AndroidManifest.xml文件中添加以下权限:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
2.3 添加蓝牙API依赖
在build.gradle文件中添加以下依赖:
implementation 'androidx.core:core-ktx:1.3.2'
implementation 'androidx.bluetooth:bluetooth:1.1.0'
进阶篇
1. 蓝牙设备扫描与连接
1.1 扫描设备
使用BluetoothAdapter获取本地蓝牙适配器,然后调用startDiscovery方法开始扫描设备。
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
bluetoothAdapter.startDiscovery();
1.2 连接设备
获取扫描到的设备信息,然后调用connect方法连接设备。
BluetoothDevice device = bluetoothAdapter.getRemoteDevice(deviceAddress);
device.connectGatt(context, false, gattCallback);
2. 蓝牙数据传输
2.1 SPP数据传输
使用BluetoothSocket连接设备,然后通过输入输出流进行数据传输。
BluetoothSocket socket = device.createRfcommSocketToServiceRecord(uuid);
socket.connect();
OutputStream outputStream = socket.getOutputStream();
InputStream inputStream = socket.getInputStream();
2.2 BLE数据传输
使用BluetoothGatt连接设备,然后通过BluetoothGattCallback接收数据。
BluetoothGatt gatt = device.connectGatt(context, false, gattCallback);
gatt.discoverServices();
实战篇
1. 蓝牙设备配对与解绑
1.1 配对
在连接设备时,如果设备未配对,系统会弹出配对对话框。用户输入配对码后,设备配对成功。
1.2 解绑
调用BluetoothDevice的removeBond方法解绑设备。
device.removeBond();
2. 蓝牙数据传输示例
以下是一个使用BLE进行数据传输的简单示例:
BluetoothGattCallback gattCallback = new BluetoothGattCallback() {
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
if (status == BluetoothGatt.GATT_SUCCESS) {
BluetoothGattService service = gatt.getService(uuid);
BluetoothGattCharacteristic characteristic = service.getCharacteristic(characteristicUuid);
gatt.readCharacteristic(characteristic);
}
}
@Override
public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
if (status == BluetoothGatt.GATT_SUCCESS) {
byte[] value = characteristic.getValue();
// 处理接收到的数据
}
}
@Override
public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
if (status == BluetoothGatt.GATT_SUCCESS) {
// 写入数据成功
}
}
};
总结
本文从蓝牙基础知识、Android蓝牙开发环境搭建、蓝牙设备扫描与连接、蓝牙数据传输等方面对Android蓝牙开发进行了全解析。通过学习本文,读者可以掌握Android蓝牙开发的基本技能,为后续的实战项目打下坚实基础。在实际开发过程中,还需不断积累经验,提高自己的编程能力。