2013-08-14 19 views
5

長いタイトルは申し訳ありませんが、ios向けにcorebluetoothを使用するとかなり面白い問題があります。 CBCentralManagerのretrievePeripheralsを呼び出して、以前にペアになったデバイスを見つけることができます。デバイスがオフの場合、IOSアプリで以前にペアリングされたBluetoothデバイスを検索しようとするとエラーが返ることはありません

これは、デバイスの電源がオンかオフかに関係なく発生します。アップルのドキュメントで、なぜデバイスがオフになっていて、設定 - > Bluetooth - >デバイスに表示されないのかを知ることができません。私はアップルがこの情報をキャッシュしていると思っていますが、これを確認するためのドキュメントは見つかりません。また、デバイスがオフで、connect呼び出しを発行すると、プログラムは正常に実行されますが、didFailToConnectの代理人は決して呼び出されません。デバイスの電源を入れるとすぐに接続されます。

デバイスへの接続時にタイムアウトパラメータを渡す方法はありますか?そうでない場合は、以前に使用されたデバイスのアプリケーションへの再接続を処理するのに最適なソリューションは何でしょうか(これは、最後に接続されたデバイスをアプリケーション内に保存しています)。あなたが提供するUUIDに関連したCBPeripheralオブジェクトを取得する程度retrievePeripherals:connectPeripheral:

1)retrievePeripherals:試みを知っておく必要があり

答えて

7

2点。ブレ装置がオフ(または国の反対側)であっても、retrievePeripherals:connectPeripheral:と呼ぶことができるCBPeripheralのインスタンスを返します。これは意図的に行われ、周りにいなくても範囲に戻ったときに自動的に接続するペリフェラルにコールを発信できます。基本的には、システムブルートゥースの内部にマーカーを作成して、デバイスが実際に見えるときにそれが接続されるべきであることを認識します。

2.)connectPeripheral:は実際のデバイスで通信チャネルが切断されていない限りタイムアウトしません。 iOSデバイスがデバイスを認識していない場合、デバイスは故障しません。また、システムのBluetooth内部で何らかのエラーが発生しない限り、タイムアウトしないでください。

タイムアウトパラメータに関しては、CoreBluetoothフレームワーク内には文書化された方法はありません。あなた自身の実装を作成することはできますが、実際にconnectPeripheral:と呼ばれている周辺UUIDのリストを保持しておき、接続時にそれらをリストからポップする方が良いと思います。そのUUID上でリストの周辺機器に接続する場合は、cancelPeripheral:を呼び出し、もう1つはconnectPeripheral:に電話をかけ、エントリを入れ替えます。行ってもいい。

+0

手動でペア設定されたすべてのデバイスを設定で取得できますか? –