問題タブ [android-ble]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
2335 参照

android - BluetoothGattServer cancelConnection は接続をキャンセルしません

BLE サーバーを公開する Android アプリケーションがあります。BluetoothGattServer#connectで接続します。それは動作します - 私のアプリはSTATE_CONNECTEDでBluetoothGattServerCallback#onConnectionStateChangeへの呼び出しを取得します。クライアントの操作が完了したら、BluetoothGattServer#cancelConnectionを使用してアプリから切断しようとします。

しかし、 BluetoothGattServerCallback#onConnectionStateChangeへの呼び出しが得られず、BLE クライアントがアドバタイズを開始しないため、接続がまだアクティブであるように見えます (何も接続されていない場合)。

logcat では次のように表示されます:

おもしろいのは、BT を完全にオフにするとすぐに、アプリがSTATE_DISCONNECTEDでBluetoothGattServerCallback#onConnectionStateChangeを呼び出すことです。

Google のトラッカーでの同様の問題: 63461および63464

0 投票する
2 に答える
3539 参照

android - BluetoothDevice は常に getName() で null を返します

Android 4.4、5、および 6 で一貫してこの問題に直面しています。

BLE Bluetooth デバイスのスキャンを実行しています。その後、デバイスのアドレス (getAddress()) やその他のデータにアクセスできます。しかし、device.getName() を呼び出すと、毎回 null が返されます。

このドキュメントは役に立ちません。「問題があった」場合に null を返すとだけ書かれています: https://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#getName()

私がアクセスできなかった他の投稿:

https://code.google.com/p/android/issues/detail?id=34411

Android BluetoothDevice.getName() は null を返します

ble デバイス bluetoothdevice.getname() が null を返す

PS: Android API レベル 21 以降で非推奨のメソッドを使用しているため、問題とは関係ありません。

ここで何がうまくいかないのかについて何か考えはありますか?

0 投票する
2 に答える
528 参照

android - 2 つの BLE デバイスから同時に温度を効果的に読み取るにはどうすればよいですか?

まず、RxAndroidBLEライブラリを使用して BLE 接続を管理しています。

2 つのSensorTag デバイスがあり、両方から同時に温度を読み取りたいと考えています。たとえば、両方のデバイスから正確に 500 ミリ秒ごとに温度を読み取り、それを 2 つの TextView でユーザーに表示したいと考えています。

私のアプリは現在、次のように両方の BLE デバイスに正常に接続しています。

今、500ミリ秒ごとに両方から同時に温度を読み取る最良の方法を探しています。

今、私は次のようなことをしています:

このコード ブロックは、500 ミリ秒ごとに呼び出されるランナブル内にあります。

これは非常に非効率な方法だと感じています。これを行うためのより良い方法があれば、誰かが私に知らせてもらえますか?

0 投票する
1 に答える
6962 参照

android - onCharacteristicWrite() が呼び出されていますが、常に書き込まれるわけではありません

Bluetooth Low Energy チップを搭載したカスタム ハードウェアがあります。array[n] == n となるように、500 個の u32 を持つ配列で設定しました。私は、デバイスに接続し、配列の長さを要求し、配列内のデータポイントを一度に 1 つずつ要求できる Android アプリに取り組んでいます。

Android アプリは、ほとんど正常に動作しているようです。デバイスに接続し、長さを要求し、前のデータが受信された後に次のデータを要求し続けます。ただし、配列の途中 (2 から 450 の要素のどこでも - は矛盾しているように見えます) で、別のコマンドを書き込み、onCharacteristicWrite() までずっと実行しますが、応答を受け取りません。BLE 周辺機器を CoolTerm に接続しましたが、コマンドを受信することさえありません。私のコードとログのスニペットは次のとおりです。

BLE サービス:

記述子の書き込み、接続状態の変更などに関連するコールバックの不要な部分は省略しました。データがブロードキャストされると、MainActivity のこの部分で受信されます。

writeCharacteristic を呼び出すコード:

コマンドの送信が速すぎても問題はないと確信しています。プロジェクトの次の部分に進む前に、より簡単にテストできるように、意図的にそうしました。

私のデバッグ ログの 1 つからのスニペット:

および対応する CoolTerm ログ スニペット:

私のペリフェラル ログでは、データポイント 53 の要求を受信して​​いないように見えることに注意してください。参考までに、onCharacteristicWrite デバッグの最初の 16 進バイトはコマンドです。コマンド 02 は、次の 2 バイトに含まれるもののインデックスでデータポイントを要求していることを意味します。

Android ログに、データポイント 51 を要求するための onCharacteristicWrite ログがないことに気付きました。これは、データの取得を停止する直前に毎回発生するようですが、これが重要なのか、それとも単にログバッファの問題。

パターンに注目するためにかなりの数のテストを実行しましたが、デバイスがデバッグ ケーブルに接続されていないときに、より多くのデータポイントを取得しているように見えることに気付きました。この時点での私の唯一の考えは、コールバックを中断する非同期の何かに問題がある可能性があるということですが、それが何をしているのかわかりません。onCharacteristicWrite が呼び出された後に実際にデータを書き込まないように見える理由について、誰か考えがありますか?

ありがとう

編集:

私は Emil の提案に従い、Bluetooth ロギングをオンにしました。私はwiresharkで遊んで、何が起こっているのかを理解しました。アプリをもう一度試してみたところ、停止するまでインデックス 102 まで実行され、停止した時点でデバイスを切断しました。Wireshark でパケットを調べたところ、デバイスの DID が 102 に関するデータを受信して​​いることがわかりましたが、103 の要求は送信されていませんでした。Android のログを再確認したところ、onCharacteristicWrite 内の Log ステートメントで、コマンドを送信したことがわかりました。 02 67 00、これは 103 の要求です。したがって、onCharacteristicWrite が呼び出されているように見えますが、特性は実際には書き込まれていません。

もう少し見つめて考えた結果、1) データが書き込まれていないため、onCharacteristicWrite が不適切に呼び出されているか、2) 何らかの形で非同期の何かがデータを中断して送信を停止していると確信しています。私はこれを何をしているのか分かりません。

最終編集:

私が仕様から理解している限り、onCharacteristicWrite は信頼できる成功した書き込みが進行中の場合にのみ呼び出されるはずですが、writeCharacteristic からの戻り値を確認することにしました。何時間も前にチェックすべきだった。そして、あなたが知っていることは、最後のリクエストで false を返していたことです。

return が false なのに onCharacteristicWrite が呼び出されたのはバグだと思います。onCharacteristicWrite 呼び出しを使用して次のデータ チャンクを書き込むのが安全であることを読みました。それらが間違っていたか、何かおかしなことが起こっているかのどちらかです。いずれにせよ、これらの関数呼び出しの戻り値を確認することはかなり良い考えだと思います。

0 投票する
1 に答える
952 参照

java - Android BLE: メッセージの長さの問題

私はBLEでAndroidアプリケーションを開発しています。このアプリケーションの要件は、さまざまな入力を使用して特定のハードウェアの電圧変動を更新することです。

そのため、文字を 8 ビット入力として BLE に書き込んでいます。各ビット値には、独自の表現が含まれています。各要求に基づいて、ハードウェアが応答し、さまざまな出力の組み合わせを提供します。出力には 24 バイトの情報が含まれます。各バイト位置は異なる値を表します。例:位置1と2は電流を表し、3と4は電圧などを表します。ここでの問題は、出力を4つの部分として取得していることです。各メッセージには 6 バイトが含まれます。単一のメッセージで同じことを取得することは可能ですか?

実装

そして、応答はGattコールバックで取得されています

特性データを使用してインテントを設定する }

0 投票する
2 に答える
2782 参照

android - Android Gatt 操作をキューに入れる

ble デバイスに接続して、そこからデータを受信するアプリを作成しました。私はこのリンク「http://toastdroid.com/2014/09/22/android-bluetooth-low-energy-tutorial」をたどっていましたが、ヒントと観察セクションで、すべてのGATT操作をキューに入れるように指示されています。それ、どうやったら出来るの?

0 投票する
0 に答える
59 参照

android - android bleが動かなくなった?

私はbleデバイスに接続するAndroidアプリを持っています。デバイスのボタンが押されると、デバイスはアプリにデータを送信します。アプリとデバイスが接続されていることを示す場合がありますが、デバイスのボタンを押してもデータが電話に送信されません。なぜこれが発生し、どうすれば修正できますか?

0 投票する
2 に答える
6844 参照

android - BluetoothGattCharacteristic からの読み取りに失敗しています

に格納されている値を読み取ろうとしていますBluetoothGattCharacteristic。以下は、BluetoothGattCallbackほとんどのアクションが行われる私のコードです。

したがって、特性から読み取るために、gatt.readCharacteristic()特性を取り、操作が成功したかどうかを示すブール値を返すメソッドを使用しようとしています。ここでは、このメソッドが返さfalseれ (「res was false」と出力)、失敗したことを示しています。

印刷されているエラー メッセージはありません。特性の正しい読み方は?このメソッドが返されるのはなぜfalseですか?

編集: Inferno が提案したように、先に進み、必要なソースをダウンロードしてから、BluetoothGatt readCharacteristic()メソッドにブレークポイントを設定しました:

readCharacteristic()android-23..\BluetoothGattのメソッドは次のとおりです。

(characteristic.getProperties() & BluetoothGattCharacteristic.PROPERTY_READ)は 0 を返しfalseているため、すぐに返されます。現在、デバッガーによると、characteristic.getProperties()の値が返されていますが8BluetoothGattCharacteristic.PROPERTY_READ静的な int 値は0x02です。

私が理解しているように、0x08 & 0x02== 0.PROPERTY_READはハードコードされた値であるため、 から返される値に何か問題があると思いますcharacteristic.getProperties()。ここで何がうまくいかないのでしょうか?