我正在创建一个应用程序来跟踪一些以用户定义的间隔重复的提醒。
我已经这样做了,当警报显示时,动作标题显示“续订”。单击此按钮时,应用程序将打开,此处我想创建下一个提醒,但问题是我不知道应用程序是否打开,因为点击了通知按钮或者在应用程序运行时触发了通知。
有人有任何想法吗?
答案 0 :(得分:13)
我不知道我的问题是否不清楚,但似乎我得到了4个不同的答案,这些答案都误解了我的问题:P
但是,我发现didReceiveLocalNotivication发生在willEnterForeground和didBecomeActive之间,所以我这样做是为了确定应用程序是否已经打开:
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
NSLog(@"Opened from notification? %@", wasInactive ? @"yes!" : @"no!");
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
wasInactive = YES;
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
wasInactive = NO;
}
答案 1 :(得分:13)
执行此操作的“正确”方法是在应用程序中检查NSApplication的applicationState属性:didReceiveRemoteNotification:您的委托方法。
从documentation处理本地通知:
iOS注意:在iOS中,您可以确定是否已启动应用程序 由于用户点击动作按钮或是否 通知已通过发送到已经运行的应用程序 检查应用程序状态。在委托的实施中 应用程序:didReceiveRemoteNotification:或 application:didReceiveLocalNotification:方法,获取值 applicationState属性并对其进行评估。如果值是 UIApplicationStateInactive,用户点击了动作按钮;如果 值是UIApplicationStateActive,应用程序是最重要的 它收到了通知。
这类似于使用applicationWillEnterForeground和applicationDidBecomeActive中设置的标志但系统支持的解决方案。
答案 2 :(得分:0)
您正在寻找
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
或
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
答案 3 :(得分:0)
查找documentation以获取UIApplication启动选项密钥。应用程序的最后一个参数:didFinishLaunchingWithOptions:delegate方法包含您需要的信息。
答案 4 :(得分:0)
如果您的应用程序已在运行,您将在app delegate上获得此委托消息
application:didReceiveLocalNotification:
如果它没有运行,你将不得不使用
application:didFinishLaunchingWithOptions:
您需要在两种方法中做出适当的回应以涵盖所有情况
<强>已更新强>
要检测用户是否激活了操作按钮,需要更多复杂性。我们可以告诉application:didFinishLaunchingWithOptions:
将本地通知作为启动选项,但使用application:didReceiveLocalNotification:
会更加困难。
由于应用程序在用户点击按钮后变为活动状态,我们必须推迟到我们看到该消息(或不是)。在NSTimer
中设置application:didReceiveLocalNotification
,然后在didBecomeActive
中取消{{1}}。这意味着用户按下了操作按钮。如果未取消定时器,则用户在触发时会在应用内。
答案 5 :(得分:0)
在此方法的app委托中:
- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
您必须检查查看此密钥的launchOptions:
UIApplicationLaunchOptionsLocalNotificationKey
当你已经活跃时,这将被称为:
- (void) application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification