Notification的簡單講解

通知系統(tǒng)使用戶得知應(yīng)用中重要的事情,例如有新信息到來或者日歷事件提醒。將通知作為一個新的通道,提醒用戶重要的事情或者記錄下用戶沒有注意到的事情。
具體見中文開發(fā)者文檔

Jelly Bean 以后,8.0以前版本的通知:

  • 通知可以包含操作,使用戶可以在通知抽屜中直接作出回應(yīng)。
  • 通知在大小和布局方面更加靈活,可以展開以顯示更多信息。
  • 新的優(yōu)先級標志讓通知可以按照重要程度排序,而不僅僅只是按照時間順序。

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

   fun createNotification(view: View) {
        val builder = NotificationCompat.Builder(this)

        val bitmap = BitmapFactory.decodeResource(resources, R.mipmap.ic_launcher)
        //設(shè)置大圖標
        builder.setLargeIcon(bitmap)
        //設(shè)置小圖標
        builder.setSmallIcon(R.drawable.depu)
        //設(shè)置標題
        builder.setContentTitle("這是標題,id=$id")
        //設(shè)置正文
        builder.setContentText("這是正文")
        //設(shè)置摘要
        builder.setSubText("這是摘要")
        //顯示指定文本
        builder.setContentInfo("這是info")
        //設(shè)置是否點擊消息后自動clean
        builder.setAutoCancel(true)
        //可以設(shè)置對消息的計數(shù),位置和setContentInfo一樣,設(shè)置setContentInfo過則setNumber失效
        builder.setNumber(msgNumbe)
        //狀態(tài)欄顯示時的文本
        builder.setTicker("在狀態(tài)欄上顯示的文本")
        //設(shè)置優(yōu)先級,影響出現(xiàn)在通知欄的排序
        builder.priority = NotificationCompat.PRIORITY_HIGH
        //設(shè)置顯示的時間,可以自定義
        builder.setWhen(System.currentTimeMillis())
        //true代表正在進行的通知,此時用戶無法清除通知
        builder.setOngoing(true)

        //設(shè)置消息的提醒方式,震動提醒:DEFAULT_VIBRATE     聲音提醒:NotificationCompat.DEFAULT_SOUND
        //三色燈提醒NotificationCompat.DEFAULT_LIGHTS     以上三種方式一起:DEFAULT_ALL
        builder.setDefaults(NotificationCompat.DEFAULT_SOUND)
        //設(shè)置震動方式,延遲零秒,震動一秒,延遲一秒、震動一秒
        builder.setVibrate(longArrayOf(0, 1000, 1000, 1000))

        val intent = Intent(this, ShowActivity::class.java)
        intent.putExtra(INTENT_KEY, id)
        val pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)
        //設(shè)置意圖
        builder.setContentIntent(pendingIntent)

        val notificationManager: NotificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        notificationManager.notify(id, builder.build())

        id++
        msgNumbe++
    }

如果我連續(xù)點擊5次,那么每一個通知點進去,intent傳遞過來的參數(shù)都是最后一個,這個后面再說。

注意:

  notificationManager.notify(id, builder.build())

這里的id代表著通知欄的通知是不是同一個,如果id一樣,只會顯示一個通知。

創(chuàng)建一個顯示多行文本的通知:

 val builder = NotificationCompat.Builder(this)

        val bitmap = BitmapFactory.decodeResource(resources, R.mipmap.ic_launcher)
        //設(shè)置大圖標
        builder.setLargeIcon(bitmap)
        //設(shè)置小圖標
        builder.setSmallIcon(R.drawable.depu)
        //設(shè)置標題
        builder.setContentTitle("這是標題,id=$id")
        //設(shè)置正文
        builder.setContentText("這是正文")


        //顯示許多文本,最對12行。部分機型不支持。
        val bigTextStyle = NotificationCompat.BigTextStyle()
        bigTextStyle.bigText("如果已經(jīng)有正在等待處理的相同類型通知了,那么你的應(yīng)用不應(yīng)當再創(chuàng)建一條新的通知,而是將多條通知合并。合并的通知提供了總體的信息描述,并且告知用戶有多少條通知正在等待處理。")
        bigTextStyle.setBigContentTitle("多文本時候的標題")
        //許多文本時候的摘要
        bigTextStyle.setSummaryText("這是摘要")
        builder.setStyle(bigTextStyle)

大多時候的通知,需要很多條,并且點擊后獲得意圖的攜帶參數(shù)都市不一樣的。
PendingIntent的flag取值有四個:

  1. FLAG_ONE_SHOT:獲取的PendingIntent只能使用一次
  2. FLAG_NO_CREATE:利用FLAG_NO_CREAT獲取的PendingIntent,若描述的Intent不存在則返回NULL值
  3. FLAG_CANCEL_CURRENT:如果描述的PendingIntent已經(jīng)存在,則在產(chǎn)生新的Intent之前會先取消掉當前的
  4. FLAG_UPDATE_CURRENT:能夠新new一個 Intent

比如demo里的id每次都增加,但是獲取到的id顯示規(guī)則如下:

        val intent = Intent(this, ShowActivity::class.java)
        intent.putExtra(INTENT_KEY, id)
        val pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)

點擊兩次發(fā)出2個通知,id分別是1,2:

flag requestCode 結(jié)果 備注
FLAG_ONE_SHOT 不變 先id為1的通知獲取到1,再點擊id為2的通知,通知消失,沒有跳轉(zhuǎn)。
先id為2的通知獲取到1,再點擊id為1的通知,通知消失,沒有跳轉(zhuǎn)。
只能獲取最早的數(shù)據(jù)
FLAG_ONE_SHOT 不同 先id為1的通知獲取到1,再點擊id為2的通知獲取獲取到2
先id為2的通知獲取到2,再點擊id為1的通知獲取獲取到1,
能正確獲取數(shù)據(jù)
FLAG_NO_CREATE 不變 先id為1的通知無反應(yīng),再點擊id為2的通知無反應(yīng)
先id為2的通知無反應(yīng),再點擊id為1的通知無反應(yīng)
無反應(yīng)
FLAG_NO_CREATE 不同 先id為1的通知無反應(yīng),再點擊id為2的通知無反應(yīng)
先id為2的通知無反應(yīng),再點擊id為1的通知無反應(yīng)
無反應(yīng)
FLAG_CANCEL_CURRENT 不變 先id為1的通知,通知消失,不跳轉(zhuǎn),再點擊id為2的通知獲取獲取到2
先id為2的通知獲取到2,再點擊id為1的通知,通知消失,不跳轉(zhuǎn)
最新的通知能正確獲取數(shù)據(jù)
FLAG_CANCEL_CURRENT 不同 先id為1的通知獲取到1,再點擊id為2的通知獲取獲取到2
先id為2的通知獲取到2,再點擊id為1的通知獲取獲取到1,
能正確獲取數(shù)據(jù)
FLAG_UPDATE_CURRENT 不變 先id為1的通知獲取到2,再點擊id為2的通知獲取獲取到2
先id為2的通知獲取到2,再點擊id為1的通知獲取獲取到2,
只能獲取到最新的數(shù)據(jù)
FLAG_UPDATE_CURRENT 不同 先id為1的通知獲取到1,再點擊id為2的通知獲取獲取到2
先id為2的通知獲取到2,再點擊id為1的通知獲取獲取到1,
能正確獲取數(shù)據(jù)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 經(jīng)常有這樣一種情況:自己為之迷醉,別人卻棄之敝履!自己深惡痛絕,別人卻窮追不舍!比如,你喜歡運動,有人卻喜歡安靜;...
    簡遠山人閱讀 402評論 8 11
  • 2018年3月6日開始回憶三年前的事,我怕時間和回憶太多,更怕隨著時間的流逝,美好的回憶不再記憶,決定把從相見到...
    shunshunli1126閱讀 303評論 0 0
  • 繼續(xù)緩慢恢復 心情還不是很穩(wěn)定 早上也還是六點就醒 但是至少保持清醒 看完了 比海更深 導演對賭徒男主的刻畫絲絲入...
    休憩中的貓閱讀 151評論 0 0
  • 分享一則名人軼事 80年代木心接受臺灣《聯(lián)合文學》采訪,被問到“文化浩劫”那段時間他是如何度過、如何繼續(xù)寫...
    獨行的小愛閱讀 643評論 0 0
  • 一、說說庫和框架的區(qū)別? 庫 的概念和意義是用來提供一些方法的集合,避免定義重復功能的函數(shù)并具有一定的模式兼容性。...
    韓寶億閱讀 560評論 0 2

友情鏈接更多精彩內(nèi)容