簡體   English   中英

Swift中的BLE背景掃描

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM