6

私はBLEでアンドロイドアプリケーションを開発しています。このアプリケーションの要件は、特定のハードウェアの電圧変動をさまざまな入力で更新することです。そこで、このアプリケーションでBLE通知APIを有効にします。これにより、最新のハードウェア電圧でアプリケーションに通知されます。Android BLE:特性タイプを特定しますか?

実装

mBluetoothGatt.setCharacteristicNotification(characteristic, enabled); 
BluetoothGattDescriptor des = characteristic.getDescriptors(); 
des.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);   
//Set the value of the descriptor to enable notification 
        mBluetoothGatt.writeDescriptor(des); 

私は同じガットでも、正常な応答を取得しています、私はガットコールバックメソッド

 @Override 
     public void onCharacteristicChanged(BluetoothGatt Gatt, BluetoothGattCharacteristic characteristic) { 
        Log.w(TAG, "**ACTION_DATA_AVAILABLE**" + characteristic.getUuid()); 
//Indication or notification was received 
        broadcastUpdate(BLEConstants.ACTION_DATA_AVAILABLE, characteristic);      
//Go broadcast an intent with the characteristic data 
       } 

で通知値で通知を取得しています。しかし、私の問題がありますコールバックメソッド。通知をUIの特定の方法で更新したいと思います。だから私は通常の応答と通知を分離する必要があります。同じことをする方法はありますか?特定のメッセージを特定するオプションは、通知からのものですか?

答えて

3

通常、ハードウェア側でWRITEプロパティとNOTIFYプロパティの両方の特性を作成して、リアルタイムデータを取得するために通知を有効にするか、完全に有効にするときにいつでも読むことができます。

ハードウェアファームウェアにアクセスして特性を追加することができれば、電圧特性と応答特性を分離すると良いでしょう。

int propertiesFlags = characteristic.getUuid(); 

もう一つの良い方法は、それを行うには、それが一つの特徴を使用しますが、データ間隔を割り当てている、私は通常、何をすべきかです:したがって、あなたはonCharacteristicChanged引数時にテストすることができます。あなたのアプリとハードウェアの間の何らかの種類のコンベンション:そうでなければ、応答はハードウェア電圧の新しい値を意味する特徴的な変化に過ぎません。

+0

あなたの更新をありがとう。とにかく、最初の選択肢は私の場合は適用されません。私はデータ受信セクションで複雑なシリアル通信プロトコルを管理しているからです。私は最初のオプションを試し、あなたを更新します。 – Nithinjith

+0

この場合、2つのUUIDの MLDP_DATA_PRIVATE_CHAR = "00035b03-58e6-07dd-021a-08123a000301"を使用しています。 CHARACTERISTIC_NOTIFICATION_CONFIG = "00002902-0000-1000-8000-00805f9b34fb"; あなたの理解に基づいて、最初のものを通常のメッセージ用に、もう1つをNotfyメッセージ用に設定することができます。私は正しいですか? – Nithinjith

+0

はい、そうするようにファームウェアを設定した場合。次に、通知(リアルタイムのデータストリーム)から回答を分離することができます。 – neogineer

1

ファームウェアを変更する可能性がない場合は、いいえ。あなたの説明によると、あなたが値を求めた場合、または値が変更された場合、NOTIFY特性タイプが計測されていないようです。

もしそうなら、私が解決策として想像できる唯一の方法は次のとおりです。

  1. あなたは値を求めました。あなたはフラグを設定しなければならず、フラグがセットされている間に報告されたすべての値はあなたが求めている値であると考える必要があります。
  2. あなたは値を求めていません。それを通知と見なしてください。

希望します。

更新:

私が見つけたことができる最高は以下の通りであったあなたがthis

によると、民間サービスのドキュメントを公開していないんRN4020 MLDPを使用しているようですhere

ホワイトトから

// private static final String MLDP_PRIVATE_SERVICE = "00035b03-58e6-07dd-021a-08123a000300"; //Private service for Microchip MLDP 
// private static final String MLDP_DATA_PRIVATE_CHAR = "00035b03-58e6-07dd-021a-08123a000301"; //Characteristic for MLDP Data, properties - notify, write 
// private static final String MLDP_CONTROL_PRIVATE_CHAR = "00035b03-58e6-07dd-021a-08123a0003ff"; //Characteristic for MLDP Control, properties - read, write 
// private static final String CHARACTERISTIC_NOTIFICATION_CONFIG = "00002902-0000-1000-8000-00805f9b34fb"; //Special UUID for descriptor needed to enable notifications 

chは、データを転送する唯一の方法が、使用していることを意味します。この特性は、NOTIFY、読み取りは行われません。したがって、あなたがそれを使用している場合、デバイス側で通知コールバックを回避することはできません。

+0

あなたの答えをありがとう。だからあなたは通知と通常のメッセージはUUIDと分離することはできないと言っているのですか? – Nithinjith

+1

ファームウェア側にアクセスできる場合は、はい、READプロパティのみを持つ特性とNOTIFYプロパティのみを持つ特性を作成できます。プロパティを組み合わせることもできます。例えば、特性は、同時に使用されるREADとWRITE特性を有することができる。ファームウェア側の仕組み、BLEサービスによってどのような特性が公開されているのか、またその特性は何か(読み取り、書き込み、レスポンスなしの書き込み、通知、表示など)を完全に理解する必要があります。 –

関連する問題