Android Bluetooth Bluetooth BluetoothGattCallbackの使い方
3776 ワード
前の記事ではBluetooth接続についていくつかの質問をしましたが、今日は主にBluetoothGattCallbackでよく使われるコールバック方法についてご紹介します.BluetoothGattCallbackのソースコードを見てみることを強くお勧めします.もっと詳しく紹介されています.ここでは初心者に直接いくつかの三方ライブラリを使うことをお勧めしません.まず、自分が原理的なものを一定の理解を持ってから、フレームワークを使ってみてこそ、三方フレームワークの長所を見つけることができます.ここでは、私が以前出会った穴を言って、fastbleというライブラリを使ったことがあります.初期化設定などの面で時間を節約できますが、デバイスの接続に成功した後、発見サービスを呼び出すと、onServicesDiscoveredメソッドはコールバックされません.このとき、最も原始的な方法から少しずつ書くことが、自分の開発に最も有益であることがわかります.次に本題に入ります.
まず、いくつかのBluetoothのフィーチャー値を定義する必要があります.
次に、BluetoothGattCallbackにこれらのフィーチャー値を書き込む方法について説明します.
BluetoothGattCallbackについてはしばらくお話ししますが、不適切な点があれば、指摘し合い、交流し合い、共に進歩することを歓迎します.ありがとう~
まず、いくつかのBluetoothのフィーチャー値を定義する必要があります.
private String SERVICES_UUID = "0000ff00-0000-1000-8000-00805f9b34fb"; // UUID
private String WRITE_UUID = "0000ff02-0000-1000-8000-00805f9b34fb"; // UUID
private String NOTIFY_UUID = "0000ff01-0000-1000-8000-00805f9b34fb"; // UUID
次に、BluetoothGattCallbackにこれらのフィーチャー値を書き込む方法について説明します.
//
BluetoothGattCallback gattCallback = new BluetoothGattCallback() {
//
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
super.onConnectionStateChange(gatt, status, newState);
if(newState == BluetoothProfile.STATE_CONNECTED){ //
//
gatt.discoverServices();//
}else if(newState == BluetoothProfile.STATE_DISCONNECTED){ //
//
}
}
// ,
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
super.onServicesDiscovered(gatt, status);
if (status == BluetoothGatt.GATT_SUCCESS) { //
List gattServicesList = gatt.getServices();
for (int i = 0; i < gattServicesList.size(); i++) {
Log.d("onServicesDiscovered", "gattServicesList UUID=" + gattServicesList.get(i).getUuid());
if(gattServicesList.get(i).getUuid().equals(UUID.fromString(SERVICES_UUID))){ // servicesUUID ,
// UUID
BluetoothGattCharacteristic writeCharacteristic = gattServicesList.get(i).getCharacteristic(UUID.fromString(WRITE_UUID));
// UUID
BluetoothGattCharacteristic notifyCharacteristic = gattServicesList.get(i).getCharacteristic(UUID.fromString(NOTIFY_UUID));
//
gatt.setCharacteristicNotification(notifyCharacteristic,true);
break;
}
}
} else {
Log.e("onServicesDiscovered", " :" + status);
}
}
//
@Override
public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
super.onCharacteristicRead(gatt, characteristic, status);
if (status == BluetoothGatt.GATT_SUCCESS) { //
}
}
//
@Override
public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
super.onCharacteristicWrite(gatt, characteristic, status);
if (status == BluetoothGatt.GATT_SUCCESS) { //
}
}
//
@Override
public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
super.onCharacteristicChanged(gatt, characteristic);
}
//
@Override
public void onMtuChanged(BluetoothGatt gatt, int mtu, int status) {
super.onMtuChanged(gatt, mtu, status);
if (status == BluetoothGatt.GATT_SUCCESS) { //
}
}
};
BluetoothGattCallbackについてはしばらくお話ししますが、不適切な点があれば、指摘し合い、交流し合い、共に進歩することを歓迎します.ありがとう~