我编写了一些应用程序,延迟发送本地通知,当收到通知时,我想根据设备移动来决定该做什么。如果设备在移动-设置相同的通知与新的延迟,并停留在背景。如果设备没有在移动-弹出特定的视图控制器。
我确实成功的“无驱动器”模式,但当设备在移动-我真的不知道热处理这种情况。
这是我现在的代码,希望能有所帮助--谢谢!
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
NSLog(@"Notification recieved from background...");
//check if device is in move
CLLocationManager *locationManager = [[CLLocationManager alloc]init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
locationManager.distanceFilter = 50;
[locationManager startMonitoringSignificantLocationChanges];
if (locationManager.location.speed > 10) {
NSLog(@"Device is in drive....");
notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:10];//TODO - Debug Set Real Time Before publish
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
NSLog(@"New Notification sent to device");
self.window.rootViewController = nil;
[self.window makeKeyAndVisible];
}
else{
NSLog(@"Device is not in drive....");
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
IGUViewFillDetailsController *vc = (IGUViewFillDetailsController *)[mainStoryboard instantiateViewControllerWithIdentifier:@"IGUViewFillDetailsController"];
vc.dic = notification.userInfo;
UINavigationController *navVC = [[UINavigationController alloc] initWithRootViewController: vc];
self.window.rootViewController = vc;
//[self.window addSubview:vc.view];
[self.window makeKeyAndVisible];
}
}发布于 2014-10-14 03:37:10
Problem1:
您计划了一个通知,它将显示在火灾日期,您可以在火灾日期前1秒取消通知并重新安排它。假设您将在10秒内触发此通知,您将使用一个将在9秒内触发的NSTimer,在计时器的选择器中检查用户是否正在移动,如果用户正在移动,则取消通知并将其延迟10秒并再次调度它,请记住,您还必须更新计时器,以便在新通知的下一个触发日期之前进行检查。
Problem2:
这是默认行为,iOS将在应用程序进入背景之前进行快照,当应用程序退出背景时,它将显示该快照,您可以在applicationDidEnterBackground中添加一个空视图,然后这个空视图将显示在所要的视图之前。
https://stackoverflow.com/questions/26247956
复制相似问题