私は Bluetooth の専門家ではありませんが、既にペアリングされている Bluetooth デバイスが互いに範囲内にある場合に、それらを自動的に検出するためにどのような可能性があるのか疑問に思っています。
背景: この場合、Android アプリケーションは Bluetooth (Rfcomm) 経由で専用のアクセサリに接続する必要があります。両方のデバイスが互いに認識されています (ペアリングされています)。Android アプリケーションは、ブロードキャスト レシーバーを登録します。アプリケーションの起動時に、アプリは検出を開始して専用アクセサリを見つけます。アクセサリが範囲内にある場合、すべてがうまく機能します。
問題: ユーザーが専用アクセサリの範囲外でアプリケーションを起動します。Android アプリケーションはアクセサリを検出しようとしますが、成功しません。次に、ユーザーは Bluetooth アクセサリの範囲に入ります。放送受信機は、現在範囲内にあるアクセサリについて通知されません。
同様のスレッド / 考えられる解決策 同様の質問が、stackoverflow で既に尋ねられています (例:範囲内にある場合に bluetooth デバイスに自動接続)。しかし、範囲内の Bluetooth デバイスを継続的に検出しようとすることは、Android デバイスのバッテリーの消耗が大きくなるため、私が探しているものではありません。
別の解決策は、アクティビティの onResume メソッドでペアリングされたデバイスへの接続を試みることです。これは機能しますが、アプリケーションをバックグラウンドで実行できないという欠点があります。そのため、ユーザーは、接続を開始するために、アプリケーションを少なくとも 1 回フォアグラウンドに移動する必要がありました。
私が考えた 3 番目のアイデアは、Android アプリケーションにもサーバー ソケットを実装することです。Android アプリケーションが開始され、検出が成功せずに終了した場合、Android アプリケーションはサーバー ソケットを作成し、アクセサリの着信通知をリッスンすることができます。これは、いくつかのシナリオで役立ちます (たとえば、ユーザーがアプリケーションを起動し、アクセサリに近づき、アクセサリをアクティブにし、アクセサリが起動時にアプリケーションに範囲内にあることを通知するなど)。ただし、両方のデバイスが互いの範囲外で起動する可能性があるため、これはまだ 100% の解決策ではありません。また、追加機能の実装も必須です (Android デバイスの Bluetooth サーバー ソケットなど)。
したがって、より良い解決策が存在するかどうか疑問に思っています。追加の ServerSockets が不要なソリューションを探しており、すでにペアリングされている 2 つのデバイスが互いに範囲内にあるという通知を常に受け取ります :-)
助けてくれてありがとう!