ios – 核心蓝牙状态保存和恢复不起作用,无法重新启动应用程序到后台

即使没有运行,我也试图使核心蓝牙唤醒应用程序.

正如苹果所说:“由于国家保留和恢复内置于核心蓝牙,您的应用程序可以选择使用此功能,要求系统保留应用程序中央和外围管理器的状态,并继续执行某些蓝牙相关任务即使您的应用程序不再运行,当其中一个任务完成时,系统将您的应用程序重新启动到后台,并让您的应用程序恢复其状态并适当地处理该事件.

我添加了以下代码来选择此功能:

myCentralManager =
        [[CBCentralManager alloc] initWithDelegate:self queue:nil
         options:@{ CBCentralManagerOptionRestoreIdentifierKey:
         @"myCentralManagerIdentifier" }];

但是当应用程序醒来时的回调从未触发过.

-(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
}

-(void)centralManager:(CBCentralManager *)central
      willRestoreState:(NSDictionary *)state {
}

这两个从来不叫.

我测试这个唤醒功能的方式:

>我在info.plist的背景模式中添加“bluetooth central”,所以BLE在后台运行.
>在我的iphone 1中启动centralManager.开始扫描.
>回家,出门,玩一些记忆沉重的游戏,在调试日志中我会看到:
“由于内存压力而终止,进程完成退出代码0”.这是为了模拟ios系统由于内存压力而终止后台应用程序.
>用另一个iphone 2开始一个信标,开始广播.
>结果:这些重新启动的回调永远不会被调用.

任何想法为什么这不工作?如果这是一个API问题,当您的手机接近BLE信标时,是否还有其他方法可以将您的应用重新启动到BLE的背景中?我尝试使用ibeacon来唤醒应用程序,但核心蓝牙中央管理器将不允许您在后台连接到ibeacon.

谢谢!

解决方法

CoreBluetooth状态恢复仅适用于连接和外围事件.目前不支持扫描.

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...