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

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

--------
理由

Bluetoothイベント
>デバイスに接続時
>デバイス指定なし
の判定について。
現在は新規デバイスからペアリング要求した時もこの条件判定がTrueになってしまう。
 

JA-Translator

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

「ペアリング済デバイスに接続時」のトリガーも、
「ペアリング済デバイスに接続している状態」の条件も、

どちらもできますよね?

私が何か勘違いしてますか?

違っていたら教えてください。
(できたら画面のコピーつけて)
 
「デバイスに接続時」→「デバイス指定なし」
を使った場合です。

これは
「ペアリング済みのデバイスのどれかから接続した時」
だと思っていたら
ペアリングしていない機器からペアリング要求があった時もすり抜けてしまうのです。

例えば通常のAndroid操作で新しい機器(イヤホン等)とペアリングを行おうとしたときに再現できます。
まだペアリング許可していないのに上記のイベントを通過してしまうのです。
 

JA-Translator

Moderator
「ペアリング済みのデバイスのどれかから接続した時」

ペアリング済みのデバイスを指定して、「どれか」に接続したときにトリガーされるように構成するば、希望どおりになると思うのですが、いかがでしょう?

例えば、私の場合は、ペアリング済みのデバイスが4個あるため、「どれか」に反応してトリガーされます。
Screenshot_20211229-141605_MacroDroid.png
 

Attachments

  • Screenshot_20211229-141605_MacroDroid.png
    Screenshot_20211229-141605_MacroDroid.png
    52 KB · Views: 2

JA-Translator

Moderator
ところで、リクエスト希望の「ペアリング済みのデバイス」を「まとめて、どれか」のトリガー選択が欲しい、という意味は理解できました。

スレッドを検索して大丈夫そうならリクエスト出しておきますね。

ただ、現時点でも、工夫次第で実現可能な範囲なので、優先度は後回しにされそうですが(笑)
まぁ、とにかく。✌️
 
ありがとうございます。
機器が増えときスマホにペアリングするだけでMacro変更なし、というのが理想形です。

また私のように思い違いでマクロを組んで非常に重要な処理をしている方がいればセキュリティホールになりえます。
少し前にBluetoothにBlueBoneというセキュリティホールが騒がれていましたがそれとにているのかなと思いました。

本格対応は先になるとしても注釈をつけるなどの対応はほしいですね。
 

JA-Translator

Moderator
@あばらんち さん、
「ペアリングしてないデバイスでトリガー動作する」のは、どうやらバクらしい、と他のユーザーからアドバイスがありました。

アプリの左側のサブメニューの「トラブルシューティング」から「不具合報告」してください

とのことです。お試しください。
 
ありがとうございます。
不具合報告やってみます。
ウォッチに入れていて原文の方もながめています(汗)

思っていたけど言えなかった「バグじゃないか?」を言ってくれる方がいたんですねw
 

Dimlos

Well-known member
英語セクションではintentやLogcatのトリガーが役立つかもしれないと書かれていたのでちょっと試してみたのですが都合の良いトリガーが探せませんでした。

私ならこんな感じで最初にペアリング済のリストを用意して、デバイスに接続時のトリガーで取得できるBluetoothデバイス名と照合して条件分岐で処理を分けるかもしれません。

画像のマクロは手動でリストを更新しなければいけませんが、ここから発展させて選択肢つきダイアログで別マクロを動かしてリストを更新させる事も可能でしょう。

私もMacroDroidに精通している訳ではありませんが制限があった時、色々と知恵を絞って検討するのは良い事だと思っています。

新機能として採用されるかはわかりませんが、それまでの間に色々な方のアイデアでブラッシュアップして問題なく使えるようになればと思い、投稿させていただきます。
 

Attachments

  • Bluetooth.jpg
    Bluetooth.jpg
    145 KB · Views: 7

fron

New member
ペアリング済みでないデバイスは接続できないのでは?

androidの仕組みにそこまで詳しいわけではありませんが、機械的な仕組みを考えたとき、デバイス接続のタイミングでそれが初回ペアリング直後のものかどうかという処理は不要に思います。何かそのような処理が必要であればペアリングの時にやればいいので。

当然、デバイス接続という処理が起こればそのデバイスはペアリング済みとなるわけで、トリガーの仕組みがこのようなものであれば動作自体は正常でしょう。

要望はあってしかるべきものでしょうが不具合だ、バグだというのは早計では?
 

Dimlos

Well-known member
ペアリング済みでないデバイスは接続できないのでは?

androidの仕組みにそこまで詳しいわけではありませんが、機械的な仕組みを考えたとき、デバイス接続のタイミングでそれが初回ペアリング直後のものかどうかという処理は不要に思います。何かそのような処理が必要であればペアリングの時にやればいいので。

当然、デバイス接続という処理が起こればそのデバイスはペアリング済みとなるわけで、トリガーの仕組みがこのようなものであれば動作自体は正常でしょう。

要望はあってしかるべきものでしょうが不具合だ、バグだというのは早計では?
仮説ですが私の理解はこうです、ペアリング要求をした時に画面にデバイスのリストが出てきますよね?この時点で何らかの接続がされていないと表示出来ないと思います。

実際にBluetoothヘッドホンをペアリング待機状態にするとデバイス接続時(デバイス指定なし)のトリガーが発動する事を確認しています。(ACL_CONNECTEDのインテントでも同様の現象が起きています)

実機検証を踏まえた結果、現状のトリガーはペアリングデバイスが接続した時に発動しているのでは無いと思います。ペアリングデバイスの接続時というトリガーが欲しいとの要望だと思いますが間違っているでしょうか?
 

Attachments

  • Pairing.jpg
    Pairing.jpg
    88.3 KB · Views: 3

fron

New member
仮説ですが私の理解はこうです、ペアリング要求をした時に画面にデバイスのリストが出てきますよね?この時点で何らかの接続がされていないと表示出来ないと思います。

実際にBluetoothヘッドホンをペアリング待機状態にするとデバイス接続時(デバイス指定なし)のトリガーが発動する事を確認しています。(ACL_CONNECTEDのインテントでも同様の現象が起きています)

実機検証を踏まえた結果、現状のトリガーはペアリングデバイスが接続した時に発動しているのでは無いと思います。ペアリングデバイスの接続時というトリガーが欲しいとの要望だと思いますが間違っているでしょうか?
検証他、ありがとうございます。

とするとやはり、(私の想像するところとも違っていましたが)バグではなさそうですね。androidの仕様からすれば想定どおり「デバイス接続時」にトリガーされている。この「デバイス接続時」がユーザーが思うタイミングと違うという話ですね。

通信の段階を考えれば、未接続状態→通信のある状態→ペアリング状態→機器が使用可能になった状態と遷移するはずです。この件は「デバイス接続時」がどのタイミングなのかしっかり把握する必要があると思います。

自動化のトリガーであると考えるとこの「デバイス接続時」は「機器が使用可能になった状態」ととらえてる人も多いんじゃないでしょうか。たいていの場合この認識で問題なく動作するというだけの話だったのでしょう
 

Dimlos

Well-known member
私はこの場でバグであるか否かの議論は必要無いと考えています、ペアリング要求をした時にトリガーが発動する事が開発者の意図した物なら修正されない可能性もありますし、意図しない物なら修正される可能性が高いでしょう。

Android DevelopersのBluetoothDeviceのリファレンスではACTION_ACL_CONNECTEDの説明がIndicates a low level (ACL) connectionと書かれており、低レベルの接続が確立された事を示すとなっています。

先ほどの仮説の接続とは、ここで解説されている低レベルの接続の事ではないかと思っています。現状のトリガーはこの低レベルの接続がされた時点で発動しているように思います。

プログラムの知識はありませんがBOND_BONDINGでペアリングされている事を調べる事が出来るようですので、MDへの実装も可能ではないかと思います。

日本語の資料が見つけられなかったので英語のページをリンクします。

Android Developers BluetoothDevice Reference
 
最初の発信者です。 
まず最初は不具合ではなく「ペアリング済みデバイスの接続時を追加してほしい」要望でした。
現行動作が変化していまうと既存利用者に影響がでるからです。
私にはなんでも不具合といって騒ぐ意図はありませんので不具合かそうでないかという議論は望みません。

英語フォーラムで不具合報告してみてとの意見がありましたので英語で一応報告しました。

このスレをよまれたみなさんが、どういう判定になるかちゃんと理解した上でご利用をされることになるであろう点は幸いです。
 

fron

New member
改めて資料を読み込んでみました。

アプリケーションでペア済みであるかを確認する方法のサンプルが公式にあるので、MacroDroidに実装されることを期待しましょう。

また、現在のバージョンのMacroDroidで実現する方法を発見しました。

インテント受信トリガーに指定している文字列:android.bluetooth.device.action.BOND_STATE_CHANGED

MacroDroidのトリガーの仕様を使ったhackですべての環境でうまくいくかはわかりません。
この方法がうまくいかない場合、デバイス接続時のトリガーが発火したとき、最初に少し待機時間を入れて、ACTION_PAIRING_REQUESTが発生したらマクロをキャンセルするという方法で実現できるかもしれません。
 
ありがとうございます。
試してみましたが次の操作でも通過してしまいました。

別スマホからペアリング要求だす。
ペアリング要求ダイアログが表示される。
キャンセルする。

みてみると先に接続が発生しその後にSTATE CHANGEのようです。
判定できなくもなさそうですが不安残りますねー
 
Last edited:
不完全ですがこのマクロで判定できました。
手元のスマホではマクロで1000ミリや2秒にしている箇所をもっと小さい値にするとすり抜けてしまいます…信頼済みデバイス接続テスト.png
 
Top