iOS下的Notification的使用

iOS下的Notification的使用

Notification是智能手機應(yīng)用編程中非常常用的一種傳遞信息的機制,而且可以非常好的節(jié)省資源屎鳍,不用消耗資源來不停地檢查信息狀態(tài)(Pooling)愿卒,在iOS下應(yīng)用分為兩種不同的Notification種類娘侍,本地和遠程向族。本地的Notification由iOS下NotificationManager統(tǒng)一管理,只需要將封裝好的本地Notification對象加入到系統(tǒng)Notification管理機制隊列中驶冒,系統(tǒng)會在指定的時間激發(fā)將本地Notification,應(yīng)用只需設(shè)計好處理Notification的方法就完成了整個Notification流程了韵卤。

本地Notification所使用的對象是UILocalNotification骗污,UILocalNotification的屬性涵蓋了所有處理Notification需要的內(nèi)容。UILocalNotification的屬性有fireDate沈条、timeZone需忿、repeatInterval、repeatCalendar蜡歹、alertBody屋厘、 alertAction、hasAction月而、alertLaunchImage汗洒、applicationIconBadgeNumber、 soundName和userInfo父款。

UILocalNotification的調(diào)度

其中fireDate溢谤、timeZone瞻凤、repeatInterval和repeatCalendar是用于UILocalNotification的調(diào)度。fireDate是UILocalNotification的激發(fā)的確切時間世杀。timeZone是UILocalNotification激發(fā)時間是否根據(jù)時區(qū)改變而改變阀参,如果設(shè)置為nil的話,那么UILocalNotification將在一段時候后被激發(fā)瞻坝,而不是某一個確切時間被激發(fā)蛛壳。 repeatInterval是UILocalNotification被重復(fù)激發(fā)之間的時間差,不過時間差是完全根據(jù)日歷單位(NSCalendarUnit)湿镀,例如每周激發(fā)的單位炕吸,NSWeekCalendarUnit,如果不設(shè)置的話勉痴,將不會重復(fù)激發(fā)赫模。 repeatCalendar是UILocalNotification重復(fù)激發(fā)所使用的日歷單位需要參考的日歷,如果不設(shè)置的話蒸矛,系統(tǒng)默認的日歷將被作為參考日歷瀑罗。

UILocalNotification的提醒內(nèi)容

alertBody、alertAction雏掠、hasAction和alertLaunchImage是當(dāng)應(yīng)用不在運行時斩祭,系統(tǒng)處理

UILocalNotification提醒是需要的內(nèi)容。alertBody是一串現(xiàn)實提醒內(nèi)容的字符串(NSString)乡话,如果 alertBody未設(shè)置的話摧玫,Notification被激發(fā)時將不現(xiàn)實提醒。alertAction也是一串字符(NSString)绑青,alertAction的內(nèi)容將作為提醒中動作按鈕上的文字诬像,如果未設(shè)置的話,提醒信息中的動作按鈕將顯示為“View”相對文字形式闸婴。alertLaunchImage是在用戶點擊提醒框中動作按鈕(“View”)時坏挠,等待應(yīng)用加載時顯示的圖片,這個將替代應(yīng)用原本設(shè)置的加載圖片邪乍。hasAction是一個控制是否在提醒框中顯示動作按鈕的布爾值降狠,默認值為YES。

UILocalNotification的其他部分

applicationIconBadgeNumber庇楞、soundName和userInfo將使UILocalNotification更完整榜配。applicationIconBadgeNumber是顯示在應(yīng)用圖標(biāo)右上角的數(shù)字,這樣讓用戶直接了解到應(yīng)用需要處理的 Notification吕晌。soundName是另一個UILocalNotification用來提醒用戶的手段芥牌,在Notification被激發(fā)之后將播放這段聲音來提醒用戶有Notification需要處理(有聲音設(shè)置時,聲音名稱要加上擴展名聂使,如sound1.mp3)壁拉,如果不設(shè)soundName的話谬俄,Notification被激發(fā)是將不會有聲音播放,除去應(yīng)用特制的聲音以外弃理,也可以將soundName設(shè)為UILocalNotificationDefaultSoundName來使用系統(tǒng)默認提醒聲音溃论。userInfo是Notification用來傳遞數(shù)據(jù)的NSDictionary。

登記UILocalNotification

在設(shè)置完UILocalNotification對象之后痘昌,應(yīng)用需要在系統(tǒng)Notification處理隊列中登記已設(shè)置完的UILocalNotification對象钥勋。登記UILocalNotification * localNotification的方式為:

[[UIApplication sharedApplication] ?scheduleLocalNotification:localNotification];

在有些時候,應(yīng)用可能需要直接激發(fā)一個Notification而不是等一段時間在激發(fā)辆苔,應(yīng)用可以以下的方式直接觸發(fā)已設(shè)好的Notification:

[[UIApplication sharedApplication] presentLocalNotificationNow:localNotification];

處理UILocalNotification

在提醒框動作按鈕被點擊后算灸,應(yīng)用開始運行時,可以在 -(BOOL)application:didFinishLaunchingWithOptions:這個Application delegate方法中處理驻啤》坡浚可以通過以下方式來加載為最近未處理的Notification:

UILocalNotification * localNotif=[launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];

如果應(yīng)用正在運行時,可以通過覆蓋在Application Delegate中的方法-(void)application:didReceiveLocalNotification:來處理 Notification骑冗。作為方法的第二個參數(shù)為UILocalNotification對象赊瞬,只需處理對象攜帶的userInfo來處理響應(yīng)的動作。

取消UILocalNotification

可以使用以下兩個方式來取消一個已經(jīng)登記的Notification贼涩,第一個方式可以直接取消一個指定的Notification巧涧,第二個方式將會把該應(yīng)用已登記的Notification一起取消

[[UIApplication sharedApplication] cancelLocalNotification:localNotification];

[[UIApplication sharedApplication] cancelAllLocalNotification];

一般需要應(yīng)用程序后臺運行時才會顯示提示,前臺運行時一般不顯示提示遥倦。如果想要當(dāng)應(yīng)用程序前臺應(yīng)行時也顯示提示谤绳,則可以通過將下面函數(shù)加到appDelegate中實現(xiàn):

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{

UIApplicationState state = application.applicationState;

//????NSLog(@"%@,%d",notification,state);

if (state == UIApplicationStateActive) {

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提醒"

message:notification.alertBody

delegate:self

cancelButtonTitle:@"Close"

otherButtonTitles:@"OK",nil];

[alert show];

[alert release];

}

}

總結(jié)

本地Notification的機制在應(yīng)用開發(fā)中非常有效,可以很好的幫助開發(fā)者管理一些指定時間需要發(fā)生的事件袒哥,例如鬧鐘類的應(yīng)用缩筛。而且因為系統(tǒng)統(tǒng)一對Notification的管理,讓同樣的任務(wù)可以非常簡單得被處理统诺,而無需讓應(yīng)用浪費資源去等待事件的觸發(fā)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末疑俭,一起剝皮案震驚了整個濱河市粮呢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钞艇,老刑警劉巖啄寡,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異哩照,居然都是意外死亡挺物,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門飘弧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來识藤,“玉大人砚著,你說我怎么就攤上這事〕彰粒” “怎么了稽穆?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長赶撰。 經(jīng)常有香客問我舌镶,道長,這世上最難降的妖魔是什么豪娜? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任餐胀,我火速辦了婚禮,結(jié)果婚禮上瘤载,老公的妹妹穿的比我還像新娘否灾。我一直安慰自己,他們只是感情好惕虑,可當(dāng)我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布坟冲。 她就那樣靜靜地躺著,像睡著了一般溃蔫。 火紅的嫁衣襯著肌膚如雪健提。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天伟叛,我揣著相機與錄音私痹,去河邊找鬼。 笑死统刮,一個胖子當(dāng)著我的面吹牛紊遵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播侥蒙,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼暗膜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鞭衩?” 一聲冷哼從身側(cè)響起学搜,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎论衍,沒想到半個月后瑞佩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡坯台,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年炬丸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜒蕾。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡稠炬,死狀恐怖焕阿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情酸纲,我是刑警寧澤旨指,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布亿驾,位于F島的核電站芦昔,受9級特大地震影響迅脐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜疾嗅,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一外厂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧代承,春花似錦汁蝶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至膀估,卻和暖如春幔亥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背察纯。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工帕棉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人饼记。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓香伴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親具则。 傳聞我的和親對象是個殘疾皇子即纲,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,876評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 概述 在多數(shù)移動應(yīng)用中任何時候都只能有一個應(yīng)用程序處于活躍狀態(tài),如果其他應(yīng)用此刻發(fā)生了一些用戶感興趣的那么通過通知...
    莫離_焱閱讀 6,521評論 1 8
  • 極光推送: 1.JPush當(dāng)前版本是1.8.2博肋,其SDK的開發(fā)除了正常的功能完善和擴展外也緊隨蘋果官方的步伐低斋,SD...
    Isspace閱讀 6,724評論 10 16
  • 推送通知 注意:這里說的推送通知跟NSNotification有所區(qū)別 NSNotification是抽象的,不可...
    iOS開發(fā)攻城獅閱讀 4,241評論 1 13
  • //發(fā)送通知 UILocalNotification *notification=[[UILocalNotific...
    韓七夏閱讀 1,625評論 1 0
  • 《羞羞的鐵拳》一個無厘頭的名字束昵,配上一個再平常不過又萬萬不可能的故事拔稳,倒成了我這國慶漫漫八天最歡樂的一段時光葛峻,感謝...
    若昭閱讀 466評論 1 2