2016-12-27 5 views
0

アンドロイドのサンプルを分析しています。アンドロイドの低エネルギー使用量について説明しています。私は通知を設定している次のコードを見つけましたが、ここで何が起こっているのかは、整数と条件ifsの内部では知ることができません。誰かがそれを少し説明できますか?ブルートゥースの低エネルギー特性(読み取り、通知)を読む - どのように機能するのですか?

とにかく、もっと良い情報源があり、アンドロイドのble概念を説明することができます。ここではどのように働いていますか?公式アンドロイドチュートリアルでは、Bluetooth仕様(https://www.bluetooth.com/specifications/adopted-specifications、Coreバージョン5.0)を読んでみてください可能性があり

@Override 
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, 
          int childPosition, long id) { 
    if (mGattCharacteristics != null) { 
     final BluetoothGattCharacteristic characteristic = 
       mGattCharacteristics.get(groupPosition).get(childPosition); 
     final int charaProp = characteristic.getProperties(); 
     if ((charaProp | BluetoothGattCharacteristic.PROPERTY_READ) > 0) { 
      // If there is an active notification on a characteristic, clear 
      // it first so it doesn't update the data field on the user interface. 
      if (mNotifyCharacteristic != null) { 
       mBluetoothLeService.setCharacteristicNotification(
         mNotifyCharacteristic, false); 
       mNotifyCharacteristic = null; 
      } 
      mBluetoothLeService.readCharacteristic(characteristic); 
     } 
     if ((charaProp | BluetoothGattCharacteristic.PROPERTY_NOTIFY) > 0) { 
      mNotifyCharacteristic = characteristic; 
      mBluetoothLeService.setCharacteristicNotification(
        characteristic, true); 
     } 
     return true; 
    } 
    return false; 
} 
+0

そのサンプルは実際にはすべての可能な方法で壊れています。インターネットを検索するだけであれば、他にもたくさんの例があります。 – Emil

+0

@エミール、他にもたくさんの例がありますが、私はいくつかを見つけようとしましたが、別の方法で複雑になっています。それらの多くは別の方法で書かれています。私が見つけたサンプル/チュートリアルのなかには、BLEの基本や、ビットからの読み方などを説明するものや、16ビットの作成から基本的なUUIDを説明するだけのものはありません。 – Krystian

答えて

0

、巻3パートG.だけではAndroidの点に注意してください...本当に悪く、公式ページには、ほとんど何も与えていないブルートゥース属性ハンドルを抽象化します。

しかし、ほとんどの人は、特定のハードウェア向けに設計されたアプリケーションを作成しています。つまり、gatt dbは既知とみなされます。

サービス、特性、および記述子を表すオブジェクトを取得するには、gatt.discoverServices()を呼び出します。結果は、onServicesDiscovered()コールバックを使用して非同期的に返されます。これは、デバイスが接続されるたびに(newStateがGATT_CONNECTEDのときにonConnectionStateChangeコールバックで)実行する必要があります。

特性に書き込むには、最初にsetValueメソッドを使用してBluetoothGattCharacteristicオブジェクトの値を設定し、gatt.writeCharacteristic(特性)を呼び出します。操作が完了すると、onCharacteristicWriteが呼び出されます。

読み取り操作は同様に動作します。 gatt.readCharacteristic(characteristic)を呼び出すと、onCharacteristicReadが呼び出されたときに結果が準備されます。特性オブジェクトでgetValue()を使用して値を取得します。

通知機能を使用するには、周辺機器が配信通知を開始するように、BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE(0x0001)をクライアント特性設定記述子に書き込む必要があります。 AndroidのBluetoothスタックに通知して、setCharacteristicNotificationを呼び出して通知をアプリに転送する必要があります。

未処理の操作は一度に1つしかできません(読み取り/書き込み)。つまり、新しい要求を発行する前にコールバックを待つ必要があります。

扱っているハードウェアが分かっている場合、通常は特性特性(characteristic.getProperties())を検査する必要はありません。ビットマスクは、Bluetooth Core V 5.0仕様、第3巻、パートG、3.3.1.1項で説明されており、各特性(読み取り、書き込み、通知など)で有効になる機能について説明しています。

16ビットと128ビットのUUID間の変換を処理する方法は、Bluetooth Core V 5.0仕様、第3巻、パートB、セクション2.5.1に示されています。 Androidのクライアントライブラリは128ビットのUUIDしか使用しないことに注意してください。

関連する問題