在iPhone锁屏界面上显示CFUserNotificationDisplayAlert

3

我正在创建一个应用程序,即使 iPhone 屏幕被锁定,也必须显示 CFUserNotificationDisplayAlert。目前我正在使用以下代码:

CFOptionFlags responseFlags = 0;
CFUserNotificationDisplayAlert(20.0, 3, NULL, NULL, NULL, CFSTR("Hello"), CFSTR("Hello World"), CFSTR("OK"), NULL, NULL, &responseFlags);

这在主屏幕上运行得很好,但如果屏幕被锁定,则不会弹出。我需要添加什么以使其在锁定屏幕上显示?

2个回答

4

您需要使用kCFUserNotificationAlertTopMostKey键。

extern CFStringRef kCFUserNotificationAlertTopMostKey;
CFStringRef keys[] = {
   kCFUserNotificationAlertTopMostKey,
   kCFUserNotificationAlertHeaderKey,
   kCFUserNotificationAlertMessageKey
};
CFStringRef values[] = {
   kCFBooleanTrue,
   CFSTR("Title"),
   CFSTR("Message")
};
CFDictionaryRef dict = CFDictionaryCreate(NULL, keys, values,     
                                          sizeof(keys)/sizeof(*keys),
                                          &kCFTypeDictionaryKeyCallBacks,
                                          &kCFTypeDictionaryValueCallBacks);
SInt32 err = 0;
CFUserNotificationRef notif = CFUserNotificationCreate(NULL,
          0, kCFUserNotificationPlainAlertLevel, &err, dict);
CFRelease(dict);
...

请参考http://iphonedevwiki.net/index.php/CFUserNotification,该网站收录了iPhone OS ≤ 3.1的所有对话框描述键。请注意,虽然它会显示在锁屏界面上,但手机不会自己唤醒。

2

CFUserNotification在iPhone OS上不被支持。相应的iPhone解决方案为推送通知


1
它是被支持的,我已经按照我的问题描述使其工作,但问题在于它没有出现在锁屏界面上,然而当iPhone未锁定时它会出现在屏幕上。 - raziiq
3
仅仅因为它起作用,并不意味着它受到支持。我们越狱开发人员使用许多API,这些API能够运行(根据某种定义),但并未得到苹果的支持。CFUserNotification不会显示在锁屏界面上,而推送通知则可以。 - rpetrich
1
MobileSubstrate有一个在运行时创建新类的示例:http://svn.saurik.com/repos/menes/trunk/mobilesubstrate/MobileSafety.mm它甚至使用了SBAlertItem :) - rpetrich
3
使用 objc_allocateClassPair 创建一个新类,然后使用 class_addMethod 添加方法,接着使用 objc_registerClassPair 注册该类,最后可以向该类发送 alloc 方法来创建一个新的实例。之后是针对 SBAlertItem 的特定代码。 - rpetrich
3
此外,获取越狱特定开发帮助的最佳途径是在irc.saurik.com上的#iphone频道。 - rpetrich
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接