2016-04-28 7 views
2

私が知りたい:(Androidのスマートフォンのような)Androidのシステムが前にペアリングされているデバイスに自動接続する方法私は思ったんだけどアンドロイドシステムがペアデバイスにどのように自動接続しますか?

たとえばのために、私は1日目に"turn on scanning/advertising -> click pairing"の手順で私のAndroidスマートフォンでの私のBluetoothヘッドセットをペアと私は、ヘッドセットの広告に電源を入れたときに、それは2日目、3、4に自動的に接続し、そうに。ポイントは、自分の(ペアになった)ヘッドセットを見つけるためにスマートフォンを再度スキャンする必要はないということです。

ペアリングされたデバイスの電源が入っているアンドロイドシステムがどのようになっているのか分かりません。アンドロイドシステムはバックグラウンドで定期的にスキャンしますか? 「スキャン」ボタンをクリックしなくても?

私が尋ねる理由:

私はメイクのペアリング後に、カスタマイズされたBLEデバイスに私のアプリの自動接続を作りたいです。私はcreateBond()メソッドでペアリング(ボンディング)を成功させましたが、それ以降は自動接続の仕方が見つかりませんでした。私はこのように自動接続機能を有効にすることができることを知っています、connectGatt(XXX, true, XXX)、しかし、この自動接続機能は、BLEデバイスが数日で切断されても機能しません。

私はアプリをAndroidシステムやBluetoothヘッドセットのように動作させたいと思っています。しかし、私はAOSPコードを掘り起こしてもアンドロイドのBluetoothシステムがどのように動作するのか見当たりませんでした。

私のような問題について多くの質問(herehere)が見つかりましたが、回答はありませんでした。

ありがとうございます。

更新:

は私がbt_btifがペアヘッドセットがオンになっているとき(広告掲載を開始)(LGのスマートフォンやネクサス5で)アクティブになることがわかりました。しかし、私のカスタムBLEデバイスでbt_btifがアクティブにならない...どうすればいいですか?

+0

ヘッドセットを例にとって考えてみると、古典的なBluetoothとBLEの違いは完全に異なります。 –

答えて

0

私は同様のアプリをやったことがあり、問題はありませんでした。あなたの問題の最後の手段として、私はBLEデバイスアドレスを簡単なDBテーブルに書いて手動で接続することをお勧めします。私はこのようなものを作った。here 。ベストプラクティスのコードではありませんが、私はあなたのためのアイデアを見つけることができれば幸いです。

+0

私がしたいのは、ユーザーからの入力なしでBLEデバイスに自動的に再接続することです。あなたのアプリはデバイスをクリックしてデバイスに接続すると思います。私の理解が間違っているなら、私に知らせてください。 – beneficial02

+0

初期化を修正しますが、アプリが起動したときや新しいデバイスが発見されたときなど、同様のことを行うことができます。 –

+0

あなたのコードからインスピレーションを得たアイデアに基づいて解決策を見つけました。ありがとうございました! – beneficial02

1

解決策が見つかりました。

まず、私の質問のための解決策:Androidスマートフォンは、近くのBluetoothデバイスの状態変化をハードウェア側から検出しているようです。ペアリングされたBluetoothヘッドセットが広告を開始すると、HALのコールバックが呼び出されます。

活動は(MainActivityonResume()に)開始されたときだから私は、MACアドレスを使用して、私がしたいデバイスにautoConnection=TrueconnectGattに私のアプリを作りました。

私のBLE周辺機器が宣伝していない場合、接続は失敗します。しかし、autoConnectionパラメータがtrueに設定されているため、広告が開始されるとデバイスは自動的に接続されます。

2

connectGatt(XXX, true, XXX)を実行することは正しい方法です。 gatt.connect()も自動接続を開始します。これを実行すると、携帯電話はデバイスをスキャンし、表示されたらデバイスに接続します。この呼び出しを中断するのは、Bluetoothが電話でオフになっている場合、またはアプリプロセスが強制終了されている場合だけです。あなたのプロセスが殺されるのを避けるために、アプリにフォアグラウンドサービスが提供されるようにしてください。

しかし、1つの問題は、Androidにバグがあり、時には自動接続を直接接続します(30秒後にキャンセルします)。 https://code.google.com/p/android/issues/detail?id=69834を参照してください。このバグを避けるためにリフレクションを使用する必要があります。

+0

autoconnectのバグについてのあなたのコメントのおかげで!、それは私が調査したことのないデバッグルートを私に導いてくれました。この回答のバグの完全なJavaの回避策があります:http://stackoverflow.com/a/39269766/5414907 –

関連する問題