IOS - 获取通知并决定做啥

Posted

技术标签:

【中文标题】IOS - 获取通知并决定做啥【英文标题】:IOS - get notification and decide what to doIOS - 获取通知并决定做什么 【发布时间】:2014-10-08 01:39:45 【问题描述】:

我编写了一些延迟发送本地通知的应用程序,当收到通知时,我想根据设备移动来决定要做什么。 如果设备处于移动状态 - 设置相同的通知和新的延迟并保持在后台。 如果设备不在移动中 - 弹出特定的视图控制器。

我在“无驱动”模式下确实成功了,但是当设备处于移动状态时 - 我真的不知道如何处理这种情况。

这是我现在的代码,希望得到一些帮助 谢谢!

- (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];

    




【问题讨论】:

什么问题,通知没有生效? 我有 2 个问题: 1. 如果设备处于移动状态 - 应用程序显示与打开的最后一个视图一起显示,我希望它在没有任何用户操作的情况下保持在后台。 2.第二个问题是,如果设备没有移动并且我推送另一个视图 - 当前视图显示在想要的视图之前.... 【参考方案1】:

问题1:

您安排了通知,它会在触发日期显示,您可以在触发日期前 1 秒取消通知并重新安排。假设您要在 10 秒内触发此通知,您使用将在 9 秒内触发的NSTimer,在计时器的选择器中检查用户是否在移动,如果他在移动,则取消通知并将其延迟 10 秒并重新安排,记住您还必须更新计时器以在新通知的下一个触发日期之前进行检查。

问题2:

这是默认行为,ios会在app进入后台前进行快照,当app退出后台时,它会显示这个快照,你可以在applicationDidEnterBackground中添加一个空视图,然后这个空视图会出现在之前想要的视图。

【讨论】:

以上是关于IOS - 获取通知并决定做啥的主要内容,如果未能解决你的问题,请参考以下文章

ios swift使用啥推送通知? [关闭]

我可以使用啥服务在 IOS 上快速发送推送通知 [关闭]

有啥方法可以在运行时更改 ios 上推送通知的权限?

当 iOS 10 应用程序在后台时,有啥方法可以触发本地通知?

GCM for iOS 和 Apple 提供的推送通知服务有啥区别

有啥方法可以更改通知图像