2015-11-01 108 views
1

我已经配置了具有两个操作的本地推送通知类别。推送通知运行良好,我正在处理我的AppDelegate中的application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier方法中的这些通知。在锁定屏幕上显示交互式本地推送通知iOS

我现在的问题是我怎么才能去只有在用户的锁屏上显示这样的通知?我对willResignInactive方法的假设是,应用程序仍然可以在用户锁定设备后运行,至少在一段时间内。我想用一种方式在用户锁定设备后正好触发通知,以便自定义操作在锁定屏幕中可用。

任何帮助,将不胜感激。

+0

你是什么意思只锁屏?如果该人收到通知,他会收到通知,不管他在电话上做了什么。如果手机已解锁,则会显示在顶部,如果您决定不点击它,则会直接移至通知中心。 – emotality

+0

@apptality我想在用户锁定设备时安排本地通知,以便他们可以通过通知与锁定屏幕上的自定义操作进行交互。 –

回答

0

运用@apptality一些细节,我能得到与达尔文通知该工作。 This answer解释了如何使通知正常工作。我用下面的代码来做到这一点:

在AppDelegate中的didFinishLaunchingWithOptions方法的地方下面的代码:

CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), //center 
           (void*)self, // observer (can be NULL) 
           lockStateChanged, // callback 
           CFSTR("com.apple.springboard.lockcomplete"), // event name 
           NULL, // object 
           CFNotificationSuspensionBehaviorDeliverImmediately); 

然后用这个方法来处理通知:

static void lockStateChanged(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) { 
NSLog(@"event received!"); 
if (observer != NULL) { 
    AppDelegate *this = (__bridge AppDelegate*)observer; 

    NSString* notifyName = (__bridge NSString*)name; 

    if ([notifyName isEqualToString:@"com.apple.springboard.lockcomplete"]) { 
     [this localNotificationSetup]; 
    } 
} 
} 

其中localNotificationSetup是你注册您的通知送货。要小心,因为这是一个基于c的方法,所以你的Objective-C代码需要改变。然后,您可以使用此方法的通知处理措施:

-(void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void (^)())completionHandler 

要真正实现任何有用的东西,你可能需要的,如果你的应用程序进入睡眠状态,加载在这个方法中,从数据NSUserDefaults的。

2

我不认为你可以访问特定的事件,因为它是你的应用程序管辖这就是为什么有applicationDidBecomeActiveapplicationWillTerminate等等这些都是你的境界,但你可以在10分钟计时,并希望他们锁定他们的电话?或者更准确,你可以检查,如果他们没有把自己的手机停机,检查这个答案:

Lock Unlock events iphone