-1

私のアプリでBLEデバイスからデータを受信しようとしています。私は、私のアプリとBLEデバイスを正常に接続することができ、私はBLEデバイスが提供するサービスを見つけることができました。onCharacteristicChangedがAndroid BLE GATTサービスで呼び出されない

特性でデータを書き込むことができ、特定のサービスの通知を正常に実行し、その返信をTRUEにすることができます。問題はの後です。gatt.writeCharacteristic(特性)正常には、onCharacteristicChangedオーバーライドメソッドを呼び出す必要があります。しかし、そのメソッドを呼び出すことはありません。その方法からの 私はBLEデバイスからデータを受け取ることができます。

私は、URL

Android BLE

の下に注意続か:サービスを使用することにより 、私はGATTの接続を確立する呼び出していますが。

private class BleGattCallback extends BluetoothGattCallback { 
     @Override 
     public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { 

      switch (newState) { 
       case BluetoothProfile.STATE_CONNECTED: 

        gatt.discoverServices(); 

        break; 

       case BluetoothProfile.STATE_DISCONNECTED: 
        Log.d(TAG, "BluetoothProfile.STATE_DISCONNECTED"); 
        gatt.close(); 
        break; 

       default: 
        break; 
      } 
     } 


     @Override 
     public void onServicesDiscovered(BluetoothGatt gatt, int status) { 
      Log.d(TAG, "onServicesDiscovered"); 

      if (status == BluetoothGatt.GATT_SUCCESS) { 
       BluetoothGattService service = gatt.getService(SERVICE_UUID); 
       if (service != null) { 

        BluetoothGattCharacteristic characteristic = service.getCharacteristic(READING_UUID); 
        if (characteristic != null) { 
         Log.d(TAG, " Subscribe Characteristic Notification UUID : "+characteristic.getUuid()); 

         gatt.setCharacteristicNotification(characteristic, true); 

         BluetoothGattDescriptor descriptor = characteristic.getDescriptor(CHARACTERISTIC_UUID); 
         descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE); 

         boolean success = gatt.writeDescriptor(descriptor); 


         Log.d(TAG, "writeDescriptor Status : " + success); 
        } 
       } 
      } 
     } 


     @Override 
     public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) { 
      super.onCharacteristicChanged(gatt, characteristic); 

      Toast.makeText(mContext,"onCharacteristicChanged",Toast.LENGTH_LONG).show(); 
      // read Value 
     } 



     @Override 
     public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) { 
      super.onDescriptorWrite(gatt, descriptor, status); 


      if (status == BluetoothGatt.GATT_SUCCESS) { 

       BluetoothGattService service = gatt.getService(SERVICE_UUID); 
       if (service != null) { 
        BluetoothGattCharacteristic characteristic = service.getCharacteristic(INDEX_UUID); 
        Log.d(TAG, "onDescriptorWrite success UUID for "+characteristic.getUuid()); 
        if (characteristic != null) { 
         characteristic.setValue(new byte[] {0x03, 0x00}); 
         gatt.writeCharacteristic(characteristic); 
        } 
       } 
      } 
     } 


    } 

答えて

0

いいえ、特性に値を書き込むと、onCharacteristicChangedは呼び出されません。 onCharacteristicWriteが呼び出されます。

通知または通知を受け取ったときにonCharacteristicChangedが呼び出されます。

+0

しかし、私はcharacterstics(READING_UUID)の通知を設定して、私はcharacterstics(INDEX_UUID)に書いています。 –

+0

書き込みが完了するまで待機するには、onCharacteristicWriteを上書きする必要があります。 – Emil

関連する問題