iOS の CoreBluetooth と外部アクセサリについて学習しようとしています。
まず、Bluetooth経由で携帯電話に接続されているデバイスのリストを表示しようとしましたprint(EAAccessoryManager.sharedAccessoryManager().connectedAccessories)
... 3つのデバイスが接続されているにもかかわらず(設定アプリによると)、空の配列が表示されます。
次に、接続/切断通知の登録を試みました:
import UIKit
import ExternalAccessory
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self,
selector: "somethingConnected:",
name: EAAccessoryDidConnectNotification,
object: nil)
NSNotificationCenter.defaultCenter().addObserver(self,
selector: "somethingDisconnected:",
name: EAAccessoryDidDisconnectNotification,
object: nil)
EAAccessoryManager.sharedAccessoryManager().registerForLocalNotifications()
}
func somethingConnected(name: EAAccessory) {
print("here")
}
func somethingDisconnected(name: EAAccessory) {
print("there")
}
}
... 私が持っている単純な Bluetooth スピーカーをオフ/オン (したがって、切断/接続) しても、何も受信しません。
この問題(実行の完了ブロックの後まで通知が配信されない)がshowBluetoothAccessoryPickerWithNameFilter()
発生していますが、通常、次のいずれかのようです。
A) iOS の何かが正しく動作していない
B) 何か間違ったことをしている (2 つのうちの可能性が高い)。
接続されているアクセサリのリストを表示するには、特別な MFI 証明書をインストールする必要がありますか? 通知が配信されないのはなぜですか?
推奨事項/コード例は大歓迎です。
アップデート
最も重要なのは、なぜうまくいかないのかまだわからないconnectedAccessories
ので、この作品に関するアドバイスが大いに望まれていることです.
とはいえ、Apple Developer のドキュメントを読み直したところ、 NSNotificationCenter.defaultCenter().addObserver
これらの種類の通知で使用することが正しい/可能であるとは思えません。
具体的には、ドキュメンテーションには、 が呼び出されるまで EA 通知は配信されないと記載されています。showBluetoothAccessoryPickerWithNameFilter()
たとえば、EAAccessoryDidConnectNotification
とEAAccessoryDidDisconnectNotification
は、ユーザーがピッカー ダイアログで行ったことをアプリに通知するためのものです。によって取得できるシステム レベルの通知ではないようですNSNotificationCenter
。
これが間違った読み方である場合は、私を修正してください。