임 iOS 프로그래밍에 상당히 익숙하며 스위프트 3의 코어 블루투스로 연결하여 데이터를 특정 (맞춤형) 주변 장치에 연결하고 교환합니다.백그라운드에서 IOS (신속한) 앱에서 BLE 주변 장치로 데이터를 전송하는 방법은 무엇입니까?
사용자가 응용 프로그램에서 특정 모드를 선택하면 사용자가 다른 응용 프로그램을 열거 나 화면을 켜더라도 일정 기간 (매분) 또는 특정 시간에 장치에 데이터 (특성 쓰기)를 보내야합니다 떨어져서. 응용 프로그램이 활성화되어 있으면 scheduledTimer를 사용하여이 작업을 수행 할 수 있지만 응용 프로그램이 비활성 상태가되면 즉시 중지됩니다. 앱이 포 그라운드로 이동하면 주변 기기로 데이터를 계속 전송할 수있는 방법이 있습니까? 이것이 가능한가?
편집
이 (디팍 Tagadiya에 의해 설명 된대로) 내 배경 모드입니다 :
class MyDevice: UIViewController {
var centralManager: CBCentralManager?
var selectedPeripheral: CBPeripheral?
var mRXCharacteristic: CBCharacteristic?
var mTXCharacteristic: CBCharacteristic?
var auto_timer = Timer()
@IBOutlet weak var AutoSwitch: UISwitch!
@IBAction func AutoSwitch(_ sender: UISwitch) {
if(sender.isOn == true){
activateAutoModeTask()
} else {
disableAutoModeTask()
}
}
override func viewDidLoad() {
super.viewDidLoad()
centralManager = CBCentralManager(delegate: self, queue: nil)
(…)
}
func activateAutoModeTask(){
auto_timer.invalidate() // just in case this button is tapped multiple times
// start the timer
auto_timer = Timer.scheduledTimer(timeInterval: 20, target: self, selector: #selector(updateTask), userInfo: nil, repeats: true)
}
func disableAutoModeTask(){
auto_timer.invalidate()
}
func updateTask(){
let new_value = getNewValue() //function that get the new value
send(text: new_value)
}
func send(text aText : String) {
(…)
self.selectedPeripheral?.writeValue(data, for: self.mRXCharacteristic!, type: .withResponse)
}
}
그리고 내 컨트롤러에서 일부 코드 아래 확장 MyDevice : CBCentralManagerDelegate {
func centralManagerDidUpdateState(_ central: CBCentralManager) {
(…)
}
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
(…)
peripheral.delegate = self
selectedPeripheral = peripheral
}
}
확장 MyDevice : CBPeripheralDelegate {
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
(...)
}
func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
(…)
}
func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
(…)
}
func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
(…)
responseReceived(response: response_text)
}
} 응용 프로그램이 활성화 된 경우 만 앱을 이동하지 않을 경우
그래서 내가 주변에 쓸 수 있어요 (예를 들어 내가 홈 버튼을 클릭하면) 백그라운드로 이동합니다. 어쩌면 뭔가가 여전히 누락되었습니다 ...
미리 감사드립니다!
아니요, 백그라운드에서 일정 시간에 중앙 (앱)에서 전송을 시작할 수 없습니다. 주변 장치가 매분 알림을 보내 앱을 실행시켜 값을 쓸 수 있습니다. – Paulw11
3 분 후에 앱이 활성 모드가 아니므로 불가능합니다. –
@ Paulw11 저에게 anwser를 지원하는 정보를 찾을 수있는 몇 가지 문서 또는 뭔가를 제공 할 수 있습니까? – sergio32