即使它没有运行,我也试图让核心蓝牙唤醒应用程序.
正如Apple所说,"因为状态保存和恢复是内置于Core Bluetooth,您的应用程序可以选择使用此功能来要求系统保留应用程序的中央和外围管理器的状态,并继续执行某些与蓝牙相关的任务.代表他们,即使你的应用程序不再运行.当其中一个任务完成后,系统会将你的应用程序重新启动到后台,并让你的应用程序有机会恢复其状态并适当地处理事件."
我添加了以下代码以选择加入此功能:
myCentralManager =
[[CBCentralManager alloc] initWithDelegate:self queue:nil
options:@{ CBCentralManagerOptionRestoreIdentifierKey:
@"myCentralManagerIdentifier" }];
Run Code Online (Sandbox Code Playgroud)
但应用程序醒来时的回调从未被触发.
-(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
}
-(void)centralManager:(CBCentralManager *)central
willRestoreState:(NSDictionary *)state {
}
Run Code Online (Sandbox Code Playgroud)
这两个从未被称为.
我正在测试这个唤醒功能的方式:
我在info.plist中的后台模式中添加了"bluetooth central",因此BLE在后台运行.
在我的iphone No.1中启动centralManager.开始扫描.
按下主页然后退出,玩一些内存沉重的游戏,在调试日志中我会看到:"因内存压力而终止.进程已完成退出代码0".这是为了模拟ios系统如何因内存压力而终止后台应用程序.
与另一部iphone No.2开始一个灯塔并开始广播.
结果:那些重新启动的回调永远不会被调用.
任何想法为什么这不起作用?如果这是一个API问题,当你的手机接近BLE信标时,还有其他方法可以将你的应用重新启动到BLE的后台吗?我已经尝试使用ibeacon唤醒应用程序,但核心蓝牙中央管理器将不允许您在后台连接到ibeacon.
谢谢!
ios core-bluetooth bluetooth-lowenergy cbcentralmanager state-restoration
我无法在iOS 8扩展程序和容器应用程序之间共享数据.我从开发门户网站和Xcode设置了这个组,我的权利包括:
<dict>
<key>com.apple.security.application-groups</key>
<array>
<string>my group id</string>
</array>
</dict>
Run Code Online (Sandbox Code Playgroud)
苹果文档中建议使用的解决方案 [[NSUserDefaults standardUserDefaults]
不适合我.
我已经尝试过@Santa Claus在这篇文章中使用App Group进行通信和持久化数据的解决方案
[[NSUserDefaults alloc] initWithSuiteName:@"<group identifier>"];
Run Code Online (Sandbox Code Playgroud)
圣诞老人的解决方案适用于模拟器但不适用于我的iPhone 4s,有关如何使其在真实设备上运行的任何想法?或者我错过了什么?
一些更新:
[[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group id"];
Run Code Online (Sandbox Code Playgroud)
函数返回url,来自容器app和扩展名的两个url看起来都相同,如" path/private/var/mobile/Containers/Shared/AppGroup/3DFB9750-A9F3-4C37-BC3C-0D5BF746B 233".我在容器应用程序中的该文件夹中创建了一个json文件,但是当我在设备上运行时,扩展程序无法在文件夹中找到任何文件.但在模拟器中,它找到了很好,一切正常.
我已经尝试过Crashlytics,它似乎不起作用,从容器应用程序崩溃崩溃但键盘扩展崩溃不发送任何报告.有任何想法吗?