ser*_*o32 5 ios core-bluetooth bluetooth-lowenergy swift
我对 iOS 编程相当陌生,我正在使用 Swift 3 中的核心蓝牙来连接特定(定制)ble 外设并交换数据。
\n\n如果用户在应用程序中选择特定模式,即使用户打开另一个应用程序或关闭屏幕,我也需要定期(每分钟)或在特定时间向设备发送数据(写入特征)。如果应用程序处于活动状态,我可以使用预定计时器来实现此目的,但一旦应用程序变为非活动状态,它就会停止。如果应用程序进入前台,有什么方法可以继续向外设发送数据?这可能吗?
\n\n编辑
\n\n这是我的背景模式(如 Deepak Tagadiya 所描述):\n背景模式
\n\n下面是我的控制器的一些代码:
\n\nclass MyDevice: UIViewController {\n\nvar centralManager: CBCentralManager?\nvar selectedPeripheral: CBPeripheral?\nvar mRXCharacteristic: CBCharacteristic?\nvar mTXCharacteristic: CBCharacteristic?\nvar auto_timer = Timer()\n\n\n@IBOutlet weak var AutoSwitch: UISwitch!\n@IBAction func AutoSwitch(_ sender: UISwitch) {\n if(sender.isOn == true){\n activateAutoModeTask()\n } else {\n disableAutoModeTask()\n }\n\n}\n\noverride func viewDidLoad() {\n super.viewDidLoad()\n\n centralManager = CBCentralManager(delegate: self, queue: nil) \n (\xe2\x80\xa6)\n}\n\nfunc activateAutoModeTask(){\n\n\n auto_timer.invalidate() // just in case this button is tapped multiple times\n\n // start the timer\n auto_timer = Timer.scheduledTimer(timeInterval: 20, target: self, selector: #selector(updateTask), userInfo: nil, repeats: true)\n\n}\n\nfunc disableAutoModeTask(){\n auto_timer.invalidate()\n}\n\nfunc updateTask(){\n let new_value = getNewValue() //function that get the new value\n\n\n send(text: new_value)\n}\n\nfunc send(text aText : String) {\n (\xe2\x80\xa6)\n self.selectedPeripheral?.writeValue(data, for: self.mRXCharacteristic!, type: .withResponse)\n}\nRun Code Online (Sandbox Code Playgroud)\n\n}
\n\n扩展 MyDevice: CBCentralManagerDelegate {
\n\nfunc centralManagerDidUpdateState(_ central: CBCentralManager) {\n (\xe2\x80\xa6) \n}\n\nfunc centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {\n (\xe2\x80\xa6)\n peripheral.delegate = self\n selectedPeripheral = peripheral\n}\nRun Code Online (Sandbox Code Playgroud)\n\n}
\n\n扩展 MyDevice: CBPeripheralDelegate {
\n\nfunc centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {\n (...)\n}\n\n\nfunc peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {\n (\xe2\x80\xa6)\n}\n\nfunc peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {\n (\xe2\x80\xa6)\n}\n\nfunc peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {\n (\xe2\x80\xa6)\n\n responseReceived(response: response_text)\n}\nRun Code Online (Sandbox Code Playgroud)\n\n}
\n\n因此,如果应用程序处于活动状态,我可以写入外围设备,但当应用程序进入后台时(例如,如果我单击“主页”按钮),则不能写入外围设备。也许还缺少一些东西......
\n\n提前致谢!
\n| 归档时间: |
|
| 查看次数: |
3181 次 |
| 最近记录: |