Android Bluetooth Bluetooth BluetoothGattCallbackの使い方


前の記事ではBluetooth接続についていくつかの質問をしましたが、今日は主にBluetoothGattCallbackでよく使われるコールバック方法についてご紹介します.BluetoothGattCallbackのソースコードを見てみることを強くお勧めします.もっと詳しく紹介されています.ここでは初心者に直接いくつかの三方ライブラリを使うことをお勧めしません.まず、自分が原理的なものを一定の理解を持ってから、フレームワークを使ってみてこそ、三方フレームワークの長所を見つけることができます.ここでは、私が以前出会った穴を言って、fastbleというライブラリを使ったことがあります.初期化設定などの面で時間を節約できますが、デバイスの接続に成功した後、発見サービスを呼び出すと、onServicesDiscoveredメソッドはコールバックされません.このとき、最も原始的な方法から少しずつ書くことが、自分の開発に最も有益であることがわかります.次に本題に入ります.
まず、いくつかの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についてはしばらくお話ししますが、不適切な点があれば、指摘し合い、交流し合い、共に進歩することを歓迎します.ありがとう~