我有一个用例,我的objective-c应用程序在终止后需要立即使用iBeacon,以便将应用程序从终止状态唤醒,连接到BLE并向设备发送命令。我有一个更大的长跑
post found here
问题
到目前为止,当我运行应用程序,搜索以前配对的设备和/或扫描外围设备,找到我的BLE设备并连接时,就会出现问题。一旦连接,用户配对BLE连接,以便他们可以通过BLE连接发送加密的特征数据。如果没有配对(在设备的命名约定中称为auth/bond),用户根本无法将数据发送到设备。它永远不会到达那里。一旦配对,就可以发送命令。。。
当我终止应用程序时,在
applicationWillTerminate
方法,我运行了以下代码。。。
- (void)applicationWillTerminate:(UIApplication *)application {
NSLog(@"*** Application Will Terminate.");
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSNumber *mode = [userDefaults objectForKey:@"deviceConnectedMode"];
if([mode intValue] == CONNECTED_MODE_INDICATOR) {
[self.bluetoothManager sendCodeToBTDevice:@"magiccommand1"
characteristic:self.bluetoothManager.wipeCharacteristic];
//I have been turning this command on and off in testing to see if I can get it to work better while disconnecting in the device rather than in the app...
//The command magiccommand2 wipes the auth/bond inside of the device
// [self.bluetoothManager sendCodeToBTDevice:@"magiccommand2"
// characteristic:self.bluetoothManager.disconnectCharacteristic];
//Place where I attempt to stop being connected to BT
[self.bluetoothManager disconnectDevice];
[self.beaconManager startMonitoring];
NSLog(@"*** Application terminated from connected mode!");
} else {
NSLog(@"*** DriveCare terminated without violation!");
}
}
我正在努力实现的目标
这个
magiccommand1
magiccommand2
命令只是设备正在通过串行端口侦听的愚蠢的测试字符串(目前为128位令牌)。一旦收到命令,它们就会做出反应,尝试擦除设备上的身份验证/绑定,并断开与设备中BLE的连接。
因此,我似乎能让应用程序从终止状态中醒来的唯一方法是使用iBeacon。所以我不得不在这里做一堆看起来很脏的东西,只是为了把这个圆钉子放在一个方孔里。在应用程序的生命周期中,它连接并配对,当我终止时,我希望它作为连接设备从BLE中完全删除。我希望iBeacon能够唤醒应用程序,连接回BLE,关闭iBeacon监控,然后从终止状态向BLE设备发送命令。这种打开/关闭或连接/断开iBeacon与BLE之间的连接很可能会导致用户必须重新配对,我不希望这样。
更多问题
[self.centralManager cancelPeripheralConnection:self.thePeripheral];
iOS系统级BT管理器似乎几乎可以立即自动重新连接(因为配对),因此没有时间断开连接并再次启动iBeacon。如果我试图断开与
centralManager
CBCentralManager
didEnterRegion
方法开火!
这是iBeacon和BLE之间的很多来回,我只是希望我甚至不需要iBeacon来唤醒应用程序。我有所有信息。plist后台BLE和iBeacon服务已打开。如果我根本没有连接到BLE,并且从未配对一次并连接我的设备,则本地应用程序通知会毫无问题地滑入,让我知道iBeacon
和
didExitRegion
方法正在顺利启动。