CoreBluetoothアプリケーションはバックグラウンドでどのようなことができるのですか?
質問
主題は、本当にすべてを物語っています。ドキュメントが存在する限り、iOS デバイス上で動作する CoreBluetooth フレームワークに対して書かれたアプリは、バックグラウンド特権リストに "bluetooth-central" を追加でき、非アクティブ時に何らかの Bluetooth イベントを処理できることを示唆していますが、どのように処理するのでしょうか。 正確には イベントが配信されたりされなかったりするのでしょうか?
例えば
- すでにペアリングを確立している機器との通信を継続できますか?
- 圏外にある/見たことのないデバイスを見つけるために、定期的に発見要求を出すことはできますか? (たとえば、新しい興味深いデバイスに遭遇したときに通知を配信できるようにしたい場合など)。
- デバイスが圏外になった後、戻ってきた場合はどうなりますか? ユーザーの介入なしに切断と接続のイベントを受け取ることができますか、それともフォアグラウンドになり、ユーザーが明示的に再接続を要求する必要がありますか?
どのように解決するのですか?
誰も知らないようなので、私は iOS の開発者アカウントを購入し、いくつかの実験を行いました。以下は、私が見つけたものです。
フォアグラウンドで実行している場合、CBCentralManager::scanForPeripheralsWithServices を使用してスキャンを開始することができます。スキャンは 制限付き として、特定のサービスを宣伝するデバイスに限定したり 無制限 (その呼び出しのパラメータにnilを渡す)。また 許可 または 重複を許可しない 前者の場合、iPhoneが広告パケットを受信するたびにdidDiscoverPeripheralコールバックを受け取ることになります。
バックグラウンドに入ると、ルールは次のように表示されます。
- を実行していた場合 無制限 スキャンを実行していた場合、それは静かにキャンセルされます。didDiscover コールバックを受け取ることはありません。
- もしあなたのスキャンが 制限されている (つまり、探しているサービスの UUID を 1 つ以上指定した場合)、スキャンは実行され続けますが、その際に allow duplicates フラグは無視されます。 . これは、次のような場合にのみ、didDiscoverPeripheralコールバックを受けることを意味します。 新しい デバイスのためのdidDiscoverPeripheralコールバックのみを受け取るようになったことを意味します。すべてのデバイスがフォアグラウンドにある間に見られた場合、コールバックは全く得られません。
- スキャンの開始と停止 は行いません。 は、どのデバイスが新しいとみなされるかをリセットします。1 つのデバイスが存在する場合、複数のスキャンにわたっても、以下の場合を除き、1 つのコールバックしか得られません...
- もし に接続します。 をデバイスに接続すると 接続を解除する で、次に 再スキャン を実行すると、デバイスは再び列挙されます(つまり、didDiscoverPeripheralをもう1回呼び出すことになります)。iOS はこれを、デバイスに興味を示したと見なすのでしょう。
私の例のデバイスは接続可能なので、接続できないデバイス (近接プロファイルを実装しているような BLE アドバタイザーなど) への接続試行が十分かどうかはわかりません。しかし、少なくとも接続可能なデバイスについては、このスキャン/接続/切断/スキャンの手順で、バックグラウンドでデバイスの存在を確認するのに十分です。
上記の結果は、iOS 5.0.1 を実行する iPhone 4S を使用して収集されました。
関連
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] UITableViewの選択を無効にするにはどうすればよいですか?
-
[解決済み] iOSのステータスバーの文字色を変更する方法
-
[解決済み] NSの接頭辞はどういう意味ですか?
-
[解決済み] UINavigationBarの1px下の行を非表示にする方法
-
[解決済み] UIButtonのタイトルを左揃えにするにはどうしたらよいですか?
-
[解決済み] テキストフィールドを移動する方法(次へボタン/完了ボタン)
-
[解決済み] iPhone 5の画面解像度に対応したアプリを開発・移行するには?
-
[解決済み] NSNotificationCenterのaddObserver in Swift
-
[解決済み] UITableView - トップにスクロールする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
XCode のコンパイル例外を解決する clang: error: linker command failed with exit code 1
-
[解決済み] Objective-Cで、ある文字列が他の文字列を含んでいるかどうかを調べるにはどうすればよいですか?
-
[解決済み] Xcode 7のエラーです。"Missing iOS Distribution signing identity for ..." (iOS配布用署名IDがありません)
-
[解決済み] App Storeのアプリと連動させる方法
-
[解決済み] SwiftでiOSキーボードを任意の場所でタッチして閉じる
-
[解決済み] iPadマルチタスクのサポートには、これらの方向が必要です。
-
[解決済み] NSNotificationCenterのaddObserver in Swift
-
[解決済み] Swiftのプロトコルでオプションのメソッドを定義するには?
-
[解決済み] swiftで電子メールアドレスを検証する方法は?
-
[解決済み] ぼかしの入ったオーバーレイビューの作成