[英]Background Scanning for BLE in Swift
我試圖讓我的應用程序在后台掃描BLE設備,並在Swift中搜索一些廣告數據。 我一直無法找到任何有關此內容的教程或問題。
基本上,當應用程序不在前台並且用戶重新啟動手機時,有沒有辦法在后台自動執行此操作?: 使用iOS獲取藍牙LE掃描響應數據
我希望你能指出我正確的方向。 謝謝
第1步:為您的項目功能啟用藍牙背景模式
第2步:確保將相應的內容添加到info.plist文件中
這是plist代碼,如果它沒有添加它:
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
<string>bluetooth-central</string>
</array>
然后,當您在CBCentralmanager上調用“scanForPeripheralsWithServices”時,您必須指定要掃描的服務數組。 你不能傳遞一個空數組。 如果你傳遞的是nil,它仍會掃描,而不是在后台。
所以指定一個服務UUID的數組是這樣的:
let arrayOfServices: [CBUUID] = [CBUUID(string: "8888")]
self.myBluetoothManager?.scanForPeripheralsWithServices(arrayOfServices, options: nil)
現在,如果你關心選項,你可以傳遞一個選項詞典來代替我在上面傳遞的nil。 大多數情況下,這用於指定您是否要在連接之前連續查看設備RSSI,或者只是想要廣告數據包一次。 放一個:
println(advertisementData["kCBAdvDataLocalName"] as! String)
println(advertisementData["kCBAdvDataManufacturerData"] as! NSData)
在“didDiscoverPeripheral”委托方法中觀察不同的行為。
如果您想要重復鍵,這是您將傳遞的詞典:
let dictionaryOfOptions = [CBCentralManagerScanOptionAllowDuplicatesKey : true]
self.myBluetoothManager?.scanForPeripheralsWithServices(arrayOfServices, options: dictionaryOfOptions)
現在Apple說,當你的應用程序進入后台模式時 ,默認此掃描選項為false,但從iOS 8.3開始,我看到它繼續掃描重復鍵。
關於背景執行的最后一點說明。 如果iOS決定暫停您的應用,掃描將停止。 如果有一堆應用正在運行,我已經看到這種情況會在30秒內發生。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.