実現したいこと
iPhoneの電源を切った状態から起動して3分後にアプリ起動し、アプリスイッチャー上から消した後、iPhoneをスリープ状態にし、ビーコンを起動させ、iPhoneにビーコン検知させたときに確実にBT接続したい
前提
アプリがフォアグラウンドではなく、アプリスイッチャー上にも存在しなくてiPhoneがスリープ状態のときにビーコンが起動したらビーコンを検知してイベントが発生してBT接続するアプリを作っている
発生している問題・エラーメッセージ
iPhoneを起動して3分後にビーコンを検知できるもののBT接続ができないことがある
(BT接続できることもある)
該当のソースコード
swift
1// ビーコン検知したときに発生するデリゲート関数 2func locationManager(_ manager: CLLocationManager, didDetermineState state: CLRegionState, for region: CLRegion) { 3 4 switch (state) { 5 case .inside: 6 print("iBeacon inside") 7 _=bleManager.startScan() 8 break; 9 10 case .outside: 11 print("iBeacon outside") 12 break; 13 14 case .unknown: 15 print("iBeacon unknown") 16 break; 17 } 18 }
swift
1// BTスキャンを行うメソッド 2func startScan() -> Bool { 3 if( centralManager.state == .poweredOn ) { 4 if centralManager.isScanning == false { 5 // サービスを指定してスキャン開始(バックグラウンドでスキャンするならサービス指定は必須) 6 let UUIDs: [CBUUID] = [systemServiceUUID] 7 centralManager.scanForPeripherals(withServices: UUIDs, options: nil) 8 return true 9 } else { 10 print("startScan NG for scanning...") 11 return false 12 } 13 } else { 14 print("startScan NG for state is not powerdOn ") 15 return false 16 } 17 }
試したこと
ローカル通知を使ってscanForPeripheralsまで到達していることは確認できた
scanForPeripheralsで指定するUUIDの数を2つだったのを1つにしたら、全く接続できなかったのがたまに接続できるようになった
補足情報(FW/ツールのバージョンなど)
iPhone8(iOS 13.7)
MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)
CPUはintel
MacOS Monterey v12.6
Xcode 14.2
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。