私はiPhoneアプリに取り組んでおり、実装していますCBCentralManager
。また、plist をバックグラウンド モードで更新し、centralmanager を識別子で初期化しました。
また、このコードをdidFinishLaunchingWithOptions
if var centralManagerIdentifiers: NSArray = launchOptions? [UIApplicationLaunchOptionsBluetoothCentralsKey] as? NSArray {
// Awake as Bluetooth Central
// No further logic here, will be handled by centralManager willRestoreState
for identifier in centralManagerIdentifiers {
if identifier as NSString == "centralManager"{
var notification = UILocalNotification()
notification.alertBody = String(centralManagerIdentifiers.count)
notification.alertAction = "open"
notification.fireDate = NSDate()
notification.soundName = UILocalNotificationDefaultSoundName
UIApplication.sharedApplication().scheduleLocalNotification(notification)
}
}
}
別のクラスで中央マネージャーを作成しましたが、それはシングルトンです。
class var sharedInstance: BLEManager {
struct Singleton {
static let instance = BLEManager()
}
return Singleton.instance
}
override init() {
super.init()
let centralQueue = dispatch_queue_create(“centralManager_queue”, DISPATCH_QUEUE_SERIAL)
centralManager = CBCentralManager(delegate: self, queue: centralQueue, options: [CBCentralManagerOptionRestoreIdentifierKey : "centralManager"])
}
アプリを 1 日か 2 日使用しないと、周辺機器がアドバタイジングを開始すると、アプリが起動してこの通知が発生しますが、CBCentral デリゲート メソッドは呼び出されません。willRestoreState メソッドも実装しましたが、それもカードを取得していません。
ユースケース: アプリが使用されていなくても、周辺機器を接続し、広告が開始されたらデータを送信する必要があります。アプリが didFinishLaunchingWithOptions 呼び出しを取得したときに、接続プロセスをどこで処理する必要がありますか? did finishlaunch メソッドで centralManager を初期化する必要がありますか?