Bluetoothの状態で「ペアリング済デバイスに接続時」を追加してほしい

fron

New member
みてみると先に接続が発生しその後にSTATE CHANGEのようです。
判定できなくもなさそうですが不安残りますねー
このhackは複数のトリガーが同時に発生した場合、最後のトリガーのみ発火するという仕様を使っています。
発生順序は理論立って正確ですが、それが同時と認識されるかどうかは端末の性能に大きく影響を受けるでしょう。
 

fron

New member
不完全ですがこのマクロで判定できました。
手元のスマホではマクロで1000ミリや2秒にしている箇所をもっと小さい値にするとすり抜けてしまいます…View attachment 2284
時間をかけて判定するならACTION_PAIRING_REQUESTが使えます。

インテント受信トリガーに指定する文字列:android.bluetooth.device.action.PAIRING_REQUEST

これは、ペアリング要求の通知が送られるときに発生します。BOND_STATE_CHANGEDとどちらが早いかはわかりませんが発生タイミングが明確なのでもっと単純なマクロにできます。
 
>このhackは複数のトリガーが同時に発生した場合、
>最後のトリガーのみ発火するという仕様を使っています。

>android.bluetooth.device.action.PAIRING_REQUEST


確認しました。
トリガーにPARING_REQUESTをいれてアクションで無視するだけでペアリング要求パターンを排除できました。
この場合はデバイス接続トリガーが発生しないのですね。

次に、明示的なペアリングはしておらず
アプリが独自に接続している機器は
やはり通過してしまいます。
これも簡単にフィルターできるとよいのですが。
 

fron

New member
ふむ、私のテストではPAIRING_REQUESTではトリガーが2回発火し、BOND_STATE_CHANGEDではうまく動作していました。どちらのトリガーも不安定で信頼できないということがわかりました。

次に、明示的なペアリングはしておらず
アプリが独自に接続している機器は
やはり通過してしまいます。
今回の手法は、結局のところデバイスに接続時トリガーの発火は防げず、続く処理の横槍でマクロを中断させています。特定のアプリがこれらの標準的な機能を妨げてしまう場合には適用できないでしょう。確実な方法は @MacroDroidDev がデバイスに接続時トリガーを改造することだけと言うしかありません。

特定のアプリはBOND_STATE_CHANGEDの発生を妨げてしまう可能性について確認しましたか?
BOND_STATE_CHANGEDは追加の情報(extra fields)を持つインテントで、トリガーの発火をフィルタリングできます。

次のように設定するとペアリングされていない機器が接続されたときだけ発火するようになります。

追加名:android.bluetooth.device.extra.PREVIOUS_BOND_STATE
正確に一致する値:10

これにより、待機時間を使ったマクロでもより見通しの良いものにできるでしょう。(ただし、BOND_STATE_CHANGEDが発生するのであれば)
 
環境によって異なるなら何かのアップロードの拍子で動作が変わることもありえるわけですね。
一人では気付けない情報です。感謝。

>追加の情報(extra fields)を持つインテント

ありがとう。
しかし私の今の知識レベルではしばらく試せそうもありません。(笑)
 
Last edited:

LinerSeven

Active member
>あばらんちさん
>fronさん

こんにちわ。
fronさんの回答を基に、試してみました。
結論、

>android.bluetooth.device.extra.PREVIOUS_BOND_STATE

の戻り値が10になるケースは、AQUOS携帯の場合には「未ペアリングのBluetooth機器がBond(ボンディング=回線としての接続)=ペアリングが要求されたとき」にトリガーできますね。


Screenshot_20220214_151656.png

Screenshot_20220214_152027.png


上に示すキャプチャのように設定して、
手元の機器を接続したところ…

Screenshot_20220214_151440.png
この、確認ダイアログの表示と同じタイミングでトリガーされました。

ちなみにペアリング済みの機器では、
>android.bluetooth.device.extra.PREVIOUS_BOND_STATE
の戻り値は10にならないので、fronさんの仰られた方法に基づいて、
「インテントの受信」アクションの戻り値が10ではないときに接続、という形のマクロが組めれば、
ご要望のマクロに近しい形になりそうですが、如何でしょうか?

よろしくお願いいたします。
liner7jp
 
ありがとうございます。

10の値が検出されることは確認できました。

しかしトリガー条件に
デバイス接続時(デバイス指定なし)
もある時はSTATE CHANGEDの前に
 デバイス接続時(デバイス指定なし)
のトリガーも発生する現象のままでした。

xperia1とAQUOS sense3 liteどちらも同じでした。

開発側で対応されるのを待ちます。
 
Top