# Android11-通知的使用

1.使用通知

1.1 創(chuàng)建一個通知

  • 第一步:獲得NotificationManager對象來對通知進行管理。

    可以調用Context的getSystemService()方法獲取。該方法接收一個字符串參數(shù),用于確定獲取哪個系統(tǒng)服務,獲取通知傳入Context.NOTIFICATION_SERVICE

    • 代碼如下:
     //創(chuàng)建一個NotificationManager對象
     NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    
  • 第二步:創(chuàng)建一個Notification對象

使用一個Builder構造器來創(chuàng)建一個Notification對象韧衣。

//創(chuàng)建Notification
 Notification notification = new NotificationCompat.Builder(MainActivity.this)
         .setContentTitle("這是通知內容標題")
         .setContentText("正式通知內容")
         .setWhen(System.currentTimeMillis())
         .setSmallIcon(R.mipmap.ic_launcher)
         .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
         .build();
  • 第三步:顯示通知

    調用NotificationManager的notify()方法可以讓通知顯示出來,該方法接收兩個參數(shù)购桑,第一個是id畅铭,保證每個通知指定的id都是不同的,第二個是要顯示的Notification對象

manager.notify(1, notification);
  • 完整代碼如下
sendNotice = (Button) findViewById(R.id.send_notification);
       sendNotice.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               //獲得NotificationManager對象
               NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
               //創(chuàng)建Notification
               Notification notification = new NotificationCompat.Builder(MainActivity.this)
                       .setContentTitle("這是通知內容標題")
                       .setContentText("正式通知內容")
                       .setWhen(System.currentTimeMillis())
                       .setSmallIcon(R.mipmap.ic_launcher)
                       .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
                       .build();
               //發(fā)送通知
               manager.notify(1, notification);
           }
       });

1.2實現(xiàn)通知的點擊功能

使用PendingIntent可以實現(xiàn)這一功能勃蜘。PendingIntent和Intent類似硕噩,但是PendingIntent更加傾向于在某個合適的時機去執(zhí)行某個某個動作,而Intent更加傾向于立即執(zhí)行某個動作缭贡。

1.2.1PendingIntent的用法

  • PendingIntent提供了幾個靜態(tài)方法用于獲取PendingIntent的實例:getActivity()炉擅、getBroadcast()辉懒、getService()
  • 這幾個靜態(tài)方法接受的參數(shù)都是相同的:
- 第一個是Context

- 第二個一般用不到谍失,通常傳0即可眶俩。

- 第三個是一個Intent對象

- 第四個是用于確定PendingIntent的行為 
  • 完整代碼如下
//初始化Intent
Intent intent = new Intent(MainActivity.this, NotificationActivity.class);
//使用Intent獲得PendingIntent對象
PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(MainActivity.this)
   .setContentTitle("這是通知內容標題")
   .setContentText("正式通知內容")
   .setWhen(System.currentTimeMillis())
   .setSmallIcon(R.mipmap.ic_launcher)
   .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
   //設置PendingIntent
   .setContentIntent(pi)
   .build();
//顯示通知
manager.notify(1,notification);
}

1.3實現(xiàn)點擊通知之后刪除通知的功能
實現(xiàn)這個功能有兩種方法,

  • 第一種是在實例化notification時setAutoCancel傳入true快鱼。
Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("這是通知內容標題")
.setContentText("正式通知內容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
//設置PendingIntent
.setContentIntent(pi)
//設置點擊通知時刪除通知
.setAutoCancel(true)
.build();
  • 第二種是顯示的調用NotificationManager的cancel()方法將它取消颠印,這個方法接收通知的id用于指定取消哪個通知
//獲得NotificationManager對象
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//取消id為1的通知
manager.cancel(1);

2.通知的高級功能

2.1通知發(fā)出時播放音頻
使用setSound()方法,接收一個Uri參數(shù)抹竹,指定通知發(fā)出時要播放的音頻

Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("這是通知內容標題")
.setContentText("正式通知內容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
//設置PendingIntent
.setContentIntent(pi)
//設置點擊通知時刪除通知
.setAutoCancel(true)
//播放音頻
.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg")))
.build();

2.2通知發(fā)出時手機振動

使用setVibrate()方法线罕,接收一個virbrate參數(shù),它是一個長整型數(shù)組窃判,用于設置手機靜止和振動的時長钞楼。下標為0的值表示手機靜止的時長,下標為1的值表示手機振動時長兢孝,下標為2的值表示手機靜止的時長窿凤。

Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("這是通知內容標題")
.setContentText("正式通知內容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
//設置PendingIntent
.setContentIntent(pi)
//設置點擊通知時刪除通知
.setAutoCancel(true)
//播放音頻
.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg")))
//設置手機接收到通知時立刻振動1秒,靜止1秒跨蟹,再振動一秒
.setVibrate(new long[] {0, 1000, 1000, 1000})
.build();

注意:使用手機的震動功能還需在AndroidManifest.xml文件中添加權限聲明

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.anwser_mac.notificationtest">
    //聲明權限
    <uses-permission android:name="android.permission.VIBRATE"/>

2.3 實現(xiàn)通知未讀時LED燈閃爍

Notification notification = new NotificationCompat.Builder(MainActivity.this)
    .setContentTitle("這是通知內容標題")
    .setContentText("正式通知內容")
    .setWhen(System.currentTimeMillis())
    .setSmallIcon(R.mipmap.ic_launcher)
    .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
    //設置PendingIntent
    .setContentIntent(pi)
    //設置點擊通知時刪除通知
    .setAutoCancel(true)
    //播放音頻
    .setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg")))
    //設置手機接收到通知時立刻振動1秒雳殊,靜止1秒,再振動一秒
    .setVibrate(new long[] {0, 1000, 1000, 1000})
    //設置LED燈,綠色閃爍
    .setLights(Color.GREEN, 1000, 1000)
    .build();
  • 注:如果不想進行這么繁雜設置窗轩,可以直接使用通知的默認效果夯秃,它會根據(jù)手機環(huán)境來決定播放什么鈴聲,及如何振動等

    Notification notification = new NotificationCompat.Builder(this)
    .setDefaults(NotificationCompat.DEFAULT_ALL)
    .build();
    

2.4設置通知顯示長文本內容痢艺,超出范圍自動換行
在setStyle方法中創(chuàng)建一個NotificationCompat.BigTextStyle對象仓洼,然后調用該對象的bigText方法

    .setStyle(new NotificationCompat.BigTextStyle().bigText("hhhhhhhhhhhhhhhhhhhhhhhhhhhhzheshi 一段很長長的文本"))

2.5設置通知顯示一張大圖

具體用法跟2.4類似,但是這次創(chuàng)建的是一個NotificationCompat.BitPictureStyle對象堤舒。

.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher_round)))

2.6設置通知的重要程度
調用setPriority()方法來設置通知的重要程度色建,分為5歌級別

  1. PRIORITY_DEFAULT : 表示默認程度,和不設置的效果一樣舌缤。
  2. PRIORITY_MIN :最低的重要程度箕戳,系統(tǒng)可能只會在特定的場景才會顯示這條通知,比如用戶下拉狀態(tài)欄的時候国撵。
  3. PRIORITY_LOW : 較低的重要程度陵吸,系統(tǒng)可能會降這類通知縮小,或改變其顯示的順序
  4. PRIORITY_HIGHT : 較高的重要程度介牙,系統(tǒng)可能會將這類通知放大壮虫,或改變其顯示的順序,將其排在比較靠前的位置环础。
  5. PRIORITY_MAX : 最高的重要程度囚似,這類通知消息必須要讓用戶立即看到剩拢,甚至需要用戶做出相應操作。
  • 具體寫法如下:
setPriority(NotificationCompat.PRIORITY_MAX)
2017-04-13_11-58-07.gif
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末谆构,一起剝皮案震驚了整個濱河市裸扶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搬素,老刑警劉巖呵晨,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異熬尺,居然都是意外死亡摸屠,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門粱哼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來季二,“玉大人,你說我怎么就攤上這事揭措】柘希” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵绊含,是天一觀的道長桑嘶。 經常有香客問我,道長躬充,這世上最難降的妖魔是什么逃顶? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮充甚,結果婚禮上以政,老公的妹妹穿的比我還像新娘。我一直安慰自己伴找,他們只是感情好盈蛮,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著技矮,像睡著了一般眉反。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上穆役,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音梳凛,去河邊找鬼耿币。 笑死,一個胖子當著我的面吹牛韧拒,可吹牛的內容都是我干的淹接。 我是一名探鬼主播十性,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼塑悼!你這毒婦竟也來了劲适?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤厢蒜,失蹤者是張志新(化名)和其女友劉穎霞势,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體斑鸦,經...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡愕贡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了巷屿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片固以。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嘱巾,靈堂內的尸體忽然破棺而出憨琳,到底是詐尸還是另有隱情,我是刑警寧澤旬昭,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布篙螟,位于F島的核電站,受9級特大地震影響稳懒,放射性物質發(fā)生泄漏闲擦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一场梆、第九天 我趴在偏房一處隱蔽的房頂上張望墅冷。 院中可真熱鬧,春花似錦或油、人聲如沸寞忿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腔彰。三九已至,卻和暖如春辖佣,著一層夾襖步出監(jiān)牢的瞬間霹抛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工卷谈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留杯拐,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像端逼,于是被迫代替她去往敵國和親朗兵。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內容

  • 原文出處: http://www.androidchina.net/6174.html Notification在...
    木木00閱讀 12,296評論 3 32
  • 一顶滩、Notification的基本使用 通知的創(chuàng)建可以放在Activity余掖、Service、BroatcastRe...
    houjianbo188閱讀 1,030評論 0 1
  • 1.什么是前臺服務 前臺服務是那些被認為用戶知道(用戶所認可的)且在系統(tǒng)內存不足的時候不允許系統(tǒng)殺死的服務礁鲁。前臺服...
    紫豪閱讀 67,747評論 31 130
  • 通知--一般當我在手記下拉的時候會發(fā)現(xiàn)一排信息提示(天氣情況盐欺,qq消息,UC推薦救氯,58推薦等等)找田,這些就是通知。 ...
    沈鳳德閱讀 4,695評論 2 1
  • 今天打算介紹下通知的基本使用方法着憨。首先墩衙,看下官網(wǎng)的介紹。 通知是可以在應用的常規(guī) UI 外部向用戶顯示的消息甲抖。當您...
    華子dev閱讀 1,249評論 0 10