2016-10-13 7 views
1

ここに私のシナリオです:Swift 3:バックグラウンドで周辺機器をスキャンするにはどうすればよいですか?

私は2つの周辺機器で接続し、私のアプリをバックグラウンドモードにして、自分のアプリとの接続が失われるまで周辺機器から離れ始めます。戻ってきたとき、彼らは手が届くと再び接続しません。

アプリがフォアグラウンドで実行されているときに同じテストを実行すると、問題は発生しません。つまり、iPhoneに近いペリフェラルを使用すると、再接続が行われます。

しかし、周辺機器の接続が失われているときは、DidDisconnectPeripheralメソッドが呼び出されています。問題は、私はthis答えを読んで、まったく同じ方法が、残念ながらそれは動作しませんすべてをしたそのスキャンは、この方法

func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) { 
    numberOfTagsSending = numberOfTagsSending - 1 
    numberOfConnectedTags = numberOfConnectedTags - 1 
    print("Tag was disconnected. Start scanning.") 

    synchronizer.alreadySynced = false 

    central.scanForPeripherals(withServices: arrayOfServices, options: [CBCentralManagerScanOptionAllowDuplicatesKey : true]) 
} 

内部で呼び出されていないです。事前

+0

この関数を 'Application:didEnterBackground'で呼び出してみましたか? – KSigWyatt

+0

さて、正直言って私はしませんでした。しかし、AppDelegateから明示的に呼び出す必要がある情報は一度も見つかりませんでした。 – DCDC

+0

バックグラウンドで動作するかどうかを確認してください。そうでなければ、 'central.scanForPeripherals()'メソッドが何らかの問題でなければなりません。あなたがあなたの質問に示した通りに正しく – KSigWyatt

答えて

3

おかげであなたはCBPeripheralインスタンスを持っていたら、あなたは再びそれを発見する必要はありません。あなたは単にそれに接続することができます。周辺機器が現在範囲外であれば、周辺機器が範囲に入るとiOSが自動的に接続し、didConnectPeripheral代理メソッドを呼び出します。

func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) { 
    numberOfTagsSending = numberOfTagsSending - 1 
    numberOfConnectedTags = numberOfConnectedTags - 1 

    central.connect(peripheral) 
} 
関連する問題