Ble藍牙API
1.獲取藍牙管理器
- BluetoothManager buetoothManage = getSystemService(Context.BLUETOOTH_SERVICE);
2.獲取藍牙適配器 - BlueToothAdapter bluetoothAdapter = bluetoothManager.getAdapter();
3.獲取藍牙掃描器
- bleScanner = bluetoothAdapter.getBluetoothLeScanner();
- bleScanner.startScan(scanCallback);
// BLE掃描回調(diào)
private final ScanCallback scanCallback = new ScanCallback() {
@Override
public void onScanResult(int callbackType, ScanResult result) {
super.onScanResult(callbackType, result);
BluetoothDevice device = result.getDevice();
String deviceName = device.getName();
// 過濾設(shè)備名稱
if (deviceName != null && deviceName.contains(DEVICE_NAME_FILTER) &&
!deviceList.contains(device)) {
deviceList.add(device);
devicesAdapter.add(device.getName() + "\n" + device.getAddress());
}
}
@Override
public void onScanFailed(int errorCode) {
super.onScanFailed(errorCode);
statusText.setText("掃描失敗: " + errorCode);
scanning = false;
btnScan.setText("掃描設(shè)備");
}
};
4.連接設(shè)備
BluetoothGatt bluetoothGatt ;
private void connectDevice() {
bluetoothGatt = selectedDevice.connectGatt(this, false, gattCallback);
}
private final BluetoothGattCallback gattCallback = new BluetoothGattCallback() {
/// 監(jiān)聽藍牙連接
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
super.onConnectionStateChange(gatt, status, newState);
if (newState == BluetoothGatt.STATE_CONNECTED) {
runOnUiThread(() -> {
statusText.setText("已連接,發(fā)現(xiàn)服務(wù)中...");
});
} else if (newState == BluetoothGatt.STATE_DISCONNECTED) {
runOnUiThread(() -> {
statusText.setText("已斷開連接");
});
}
}
/// 發(fā)現(xiàn)BluetoothGatt服務(wù)
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
super.onServicesDiscovered(gatt, status);
List<BluetoothGattService> gattServices =gatt.getServices();
BluetoothGattCharacteristic charData = bluetoothGatt.getService(SERVICE_UUID).getCharacteristic(DATA_UUID);
BluetoothGattCharacteristic charHeartbeat = bluetoothGatt.getService(SERVICE_UUID).getCharacteristic(HEARTBEAT_UUID);
//設(shè)置開啟特性監(jiān)聽,這樣onCharacteristicChanged才會有回調(diào)數(shù)據(jù)
bluetoothGatt.setCharacteristicNotification(charData, true);
bluetoothGatt.setCharacteristicNotification(charHeartbeat, true);
}
/// 特性變化時,收到通知
@Override
public void onCharacteristicChanged(
BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic
) {
super.onCharacteristicChanged(gatt, characteristic);
// 這里處理從BLE設(shè)備接收到的數(shù)據(jù)
byte[] data = characteristic.getValue();
if (data != null && data.length > 0) {
String receivedData = new String(data, StandardCharsets.UTF_8);
// 在主線程更新UI
runOnUiThread(() -> {
//parseAndDisplayData(receivedData);
});
}
}
};