我正在使用以下代码“简单地”从我的手表应用程序中确定父应用程序的应用程序状态:
WatchKit 扩展:
[WKInterfaceController openParentApplication:[NSDictionary dictionary] reply:^(NSDictionary *replyInfo, NSError *error)
{
UIApplicationState appState = UIApplicationStateBackground;
if(nil != replyInfo)
appState = (UIApplicationState)[((NSNumber*)[replyInfo objectForKey:kAppStateKey]) integerValue];
//handle app state
}];
主应用:
- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *replyInfo))reply
{
__block UIBackgroundTaskIdentifier realBackgroundTask;
realBackgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
reply([NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:[[UIApplication sharedApplication] applicationState]], kAppStateKey, nil]);
[[UIApplication sharedApplication] endBackgroundTask:realBackgroundTask];
}];
reply([NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:[[UIApplication sharedApplication] applicationState]], kAppStateKey, nil]);
[[UIApplication sharedApplication] endBackgroundTask:realBackgroundTask];
}
当应用程序处于前台时,这 100% 的时间都有效。当应用程序被“最小化”或“终止”时,这可能会在 50% 的时间内工作(可能更少)。当它不起作用时,它似乎无限期地阻塞。例如,如果 1 分钟后,我启动父应用程序,调用 (openParentApplication) 立即返回状态“UIApplicationStateBackground”(在我启动应用程序之前的状态,如果我很明显应用程序不处于后台状态启动它)。
顺便说一句:我正在使用真正的硬件进行测试。
我究竟做错了什么?为什么即使我创建了后台任务,iOS 也会在接到电话后立即让我的主应用程序进入睡眠状态?这是一个完整的表演停止者。
任何想法或建议将不胜感激!!