UILocalNotification *notification=[[UILocalNotification alloc] init];app
2 if (notification!=nil) {ide
3 NSDate *now = [NSDate date];spa
4 //從如今開始,10秒之後通知it
5 notification.fireDate=[now dateByAddingTimeInterval:10];io
6 //使用本地時區class
7 notification.timeZone=[NSTimeZone defaultTimeZone];test
8 notification.alertBody=@"頂部提示內容,通知時間到啦";後臺
9 //通知提示音 使用默認的object
10 notification.soundName= UILocalNotificationDefaultSoundName;date
11 notification.alertAction=NSLocalizedString(@"你鎖屏啦,通知時間到啦", nil);
12 //這個通知到時間時,你的應用程序右上角顯示的數字。
13 notification.applicationIconBadgeNumber = 1;
14 //add key 給這個通知增長key 便於半路取消。nfkey這個key是我本身隨便起的。
15 // 假如你的通知不會在還沒到時間的時候手動取消 那下面的兩行代碼你能夠不用寫了。
16 NSDictionary *dict =[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:notificationtag],@"nfkey",nil];
17 [notification setUserInfo:dict];
18 //啓動這個通知
19 [[UIApplication sharedApplication] scheduleLocalNotification:notification];
20 //這句真的特別特別重要。若是不加這一句,通知到時間了,發現頂部通知欄提示的地方有了,而後你經過通知欄進去,而後你發現通知欄裏邊還有這個提示
21 //除非你手動清除,這固然不是咱們但願的。加上這一句就行了。網上不少代碼都沒有,就比較鬱悶了。
22 [notification release];
23 }
日程提醒功能,本地通知的功能,記錄相關知識以下:
一、本地通知的定義和使用:
本地通知是UILocalNotification的實例,主要有三類屬性:
scheduled time,時間週期,用來指定iOS系統發送通知的日期和時間;
notification type,通知類型,包括警告信息、動做按鈕的標題、應用圖標上的badge(數字標記)和播放的聲音;
自定義數據,本地通知能夠包含一個dictionary類型的本地數據。
對本地通知的數量限制,iOS最多容許最近本地通知數量是64個,超過限制的本地通知將被iOS忽略。
代碼以下 複製代碼
UILocalNotification *localNotification = [[UILocalNotification alloc] init];
if (localNotification == nil) {
return;
}
//設置本地通知的觸發時間(若是要當即觸發,無需設置),這裏設置爲20妙後
localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:20];
//設置本地通知的時區
localNotification.timeZone = [NSTimeZone defaultTimeZone];
//設置通知的內容
localNotification.alertBody = affair.title;
//設置通知動做按鈕的標題
localNotification.alertAction = @"查看」;
//設置提醒的聲音,能夠本身添加聲音文件,這裏設置爲默認提示聲
localNotification.soundName = UILocalNotificationDefaultSoundName;
//設置通知的相關信息,這個很重要,能夠添加一些標記性內容,方便之後區分和獲取通知的信息
NSDictionary *infoDic = [NSDictionary dictionaryWithObjectsAndKeys:LOCAL_NOTIFY_SCHEDULE_ID,@"id",[NSNumber numberWithInteger:time],@"time",[NSNumber numberWithInt:affair.aid],@"affair.aid", nil];
localNotification.userInfo = infoDic;
//在規定的日期觸發通知
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
//當即觸發一個通知
// [[UIApplication sharedApplication] presentLocalNotificationNow:localNotification];
[localNotification release];
二、取消本地通知:
代碼以下 複製代碼
//取消某一個通知
NSArray *notificaitons = [[UIApplication sharedApplication] scheduledLocalNotifications];
//獲取當前全部的本地通知
if (!notificaitons || notificaitons.count <= 0) {
return;
}
for (UILocalNotification *notify in notificaitons) {
if ([[notify.userInfo objectForKey:@"id"] isEqualToString:LOCAL_NOTIFY_SCHEDULE_ID]) {
//取消一個特定的通知
[[UIApplication sharedApplication] cancelLocalNotification:notify];
break;
}
}
//取消全部的本地通知
[[UIApplication sharedApplication] cancelAllLocalNotifications];
三、本地通知的響應:
若是已經註冊了本地通知,當客戶端響應通知時:
a、應用程序在後臺的時候,本地通知會給設備送達一個和遠程通知同樣的提醒,提醒的樣式由用戶在手機設置中設置
b、應用程序正在運行中,則設備不會收到提醒,可是會走應用程序delegate中的方法:
代碼以下 複製代碼
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
}
,若是你想實現程序在後臺時候的那種提醒效果,能夠在上面這個方法中添加相關代碼,示例代碼:
代碼以下 複製代碼
if ([[notification.userInfo objectForKey:@"id"] isEqualToString:@"affair.schedule"]) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"test" message:notification.alertBody delegate:nil cancelButtonTitle:@"關閉" otherButtonTitles:notification.alertAction, nil nil];
[alert show];
}
須要注意的是,在狀況a中,若是用戶點擊提醒進入應用程序,也會執行收到本地通知的回調方法,這種狀況下若是你添加了上面那段代碼,則會出現連續出現兩次提示,爲了解決這個問題,修改代碼以下:
代碼以下 複製代碼
if ([[notification.userInfo objectForKey:@"id"] isEqualToString:@"affair.schedule"]) {
//判斷應用程序當前的運行狀態,若是是激活狀態,則進行提醒,不然不提醒
if (application.applicationState == UIApplicationStateActive) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"test" message:notification.alertBody delegate:nil cancelButtonTitle:@"關閉" otherButtonTitles:notification.alertAction, nil nil];
[alert show];
}
}