問題タブ [rxandroidble]
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.
android - rxandroidbleで通知を無効にする方法は?
現在、アプリの 1 つの Android のネイティブ BLE API を置き換えるために、rxandroidble を使用しようとしています。
通知を無効にする方法は? 次のサンプル コードで有効にできます。
しかし、私の製品には、オンデマンドで通知を無効/有効にする必要があるユースケースがあります。
さらに、通知を無効/有効にする代わりに、直接購読解除/再接続しようとしましたが、購読解除コマンドは明らかに実行されません。私の仮説は、スループットが高いためです (デバイスは 300 - 400Hz で通知します)、それはもっともらしいですか?
(BLE が高スループットに最適なテクノロジではないことはわかっていますが、ここでは研究開発目的です:))
ご協力いただきありがとうございます!
android - 一度に 1 つずつアイテムを放出し、条件が満たされるまでそれを操作し、その後次のアイテムに進みます
BLE デバイスのリストがあり、RxJava を使用してそれらとやり取りしています。リストからアイテムを発行し、X が発生するまで特性を繰り返し書き込み、リスト内の次のアイテムに進む必要があります。
現在のコード:
次のようになり.connectForPolicing()
ます。
このコードは、リスト内のすべてのアイテムをすぐに発行するように見えるため、すべてのアイテムを同時に接続してバズさせます。一度に 1 つずつアイテムを放出して、それらとやり取りできるようにするにはどうすればよいですか?
擬似コードは次のようになります。
bluetooth-lowenergy - Android BLE iBeacon アドバタイズ パケットが予想よりも大きい
デバイスの RSSI と校正された送信電力を考慮して、BLE デバイスまでの推定範囲を取得しようとしています。
調整された txPower は、周辺機器の iBeacon アドバタイズ パケットの最後のバイトとして送信されると考えられます。私が見つけたドキュメントによると、これらのパケットの長さは 30 バイトである必要があります。
ただし、byte[]
パケットに対して返される の長さは 62 バイトです。このため、広告データの形式は不明です。
62 バイト パケットのフォーマットを解読する方法はありますか?
android - OnErrorNotImplementedException が含まれているエラー処理で何らかの形でまだ呼び出されている
BLE 特性への書き込みを実行しています。これらの特定のデバイスでは、周辺機器がまだロックされている場合、特定の特性は書き込み可能ではありません。
例外がスローされるのではなく、デバイスがまだロックされているときにこれが呼び出された場合、視覚的な通知を提供したいと思います。
以下は、このアプリケーション用に作成したカスタム ライブラリのコードの最初の部分です。
そして、前のものを使用する方法は次のとおりです。
これは以前は単なる でしたが、実装されていることを明確に示すためにAction1
に変更しました。Subscriber
onError()
例外を防ぐために、余分な演算子 ( onErrorReturn()
, ) を追加しました。onErrorResumeNext()
例外がまだ発生しているのはなぜですか?
編集:スタック トレース:
android - rxandroidble: デバイスが長時間切断されている: アプリがスリープ状態になる
autoconnect = true を使用して rxandroidble を使用し、センサーからのデータを継続的に監視しています。アプリは、以前に接続したセンサーを継続的にスキャンします。
電話が電源に接続されていない場合でも、センサーのデータ監視とスキャンは一晩中継続する必要があります。
センサーが夕方に接続されている場合、アプリが一時的に切断されても、アプリは一晩中接続されたままになります。
ただし、センサーが夜間に 6 時間切断された場合 (センサーのバッテリーを抜いたため)、朝にセンサーのバッテリーを再接続した場合、電話はセンサーに再接続されないように見えます。
Android サービスの新しいセンサーを 8 秒ごとに常にスキャンしていますが、これは WakefulService ではなく、WakefulIntent によって開始されたものでもありません。それはすべきですか?
何が起こっているのでしょうか?rxandroidble は、この状況でセンサーをスキャンし続けるように設計されていますか? または、切断後に手動で再接続を試みる必要がありますか?その後、rxandroid は継続的に再接続を試みます。
ここに私のスキャンコードがあります:
ここに私の接続コードがあります:
接続状態が切断に変わった場合、手動で再接続しようとはしません。スキャンまたは自動接続のいずれかでこの問題を処理する必要がありますか?
Androidのバッテリー設定でアプリの「アプリの最適化」別名Dozeモードをオフにしましたが、それが何かをしているのかどうかわかりません。
EDIT 1: これが私のログです....最初は問題なく接続し、次に接続を試み、すぐに切断します:
ありがとう!
2回目の編集:
消費するためのコード
private void RxBleOnConnectionReceived(RxBleDeviceServices services) { // サービスを発見する
rx-java - Rxを活用するための接続方法の書き換え
ライブラリ内のメソッドを Rx を利用するように書き直しています。以下のコード例はオリジナルの方法です。
Subscription
私の最初の試みは、に保存する代わりに a を返すことでしたmEstablishedConnection
。これにより、ユーザーは登録を解除して切断をトリガーできます。
上記の問題は、エラーを発信者に適切に伝達できないことです。このメソッドをリアクティブにしてRxBleConnection
、サードパーティのクラスである を返すだけでなく、呼び出し元がエラーを受信できるようにするにはどうすればよいですか?