Android通知筆記

參考:

一. 概念介紹

  • NotificationId
    ?用來唯一標(biāo)識(shí)一條通知的id鸟妙,更新通知時(shí)候會(huì)用到
  • NotificationManager
    ?用來管理通知的類忽匈,一般用來顯示(notify)郭厌,取消(cancel)通知液走,用getSystemService(Context.NOTIFICATION_SERVICE)方法獲取
  • NotificationCompat.Builder
    ?用來創(chuàng)建通知该抒,并進(jìn)行一系列設(shè)置的類
  • PendingIntent
    ?一種用來延遲啟動(dòng)Activity涌攻、Service芝此、BroadCast的Intent膊升,通過PendingIntent的getXXX獲取啟動(dòng)Activity、Service等的PI對(duì)象
  • TaskStackBuilder
    ?創(chuàng)建一個(gè)人工的返回棧,用于點(diǎn)擊通知之后啟動(dòng)的Activity按返回返回到其父Activity而不是返回到桌面

二. 通知必備的三要素

創(chuàng)建通知必須要有的三要素,說是三要素,但只有小圖標(biāo)是不可缺少的,缺少之后會(huì)crash,其他兩者缺少的話通知照樣能顯示

  1. 小圖標(biāo)
    ?小圖標(biāo),通過setSmallIcon設(shè)置
  2. 標(biāo)題
    ?通知標(biāo)題,通過setContentTitle設(shè)置
  3. 詳細(xì)文本
    ?通知內(nèi)容,通過setContentText設(shè)置

三. 通知操作

點(diǎn)擊通知后進(jìn)行的操作,常用操作如下:

  1. 打開Activity
    • 利用PendingIntent構(gòu)建想打開的Activity
    • 調(diào)用setContentIntent方法設(shè)置PI
  2. 暫停/繼續(xù)下載
  3. 播放/暫停歌曲
  4. 自定義操作等

四. 通知優(yōu)先級(jí)

通知優(yōu)先級(jí)相當(dāng)于是一個(gè)提示喷户,用來告訴系統(tǒng)用哪種形式顯示UI河哑,有五種模式:-2到2鲤妥;最高級(jí)別會(huì)以懸浮通知的形式顯示

五. 創(chuàng)建簡單通知的步驟

  1. 實(shí)例化NotificationCompat.Builder對(duì)象
  2. 創(chuàng)建點(diǎn)擊通知要進(jìn)行的操作(PendingIntent)
  3. 利用Builder對(duì)象對(duì)通知進(jìn)行一系列設(shè)置
  4. 實(shí)例化NotificationManager對(duì)象
  5. 調(diào)用NotificationManager對(duì)象的notify對(duì)象發(fā)送通知
mBuilder = new NotificationCompat.Builder(this);//參數(shù)為Context的構(gòu)造函數(shù)在android8.0以上版本中已棄用衷模,要用Context熙揍,channel的構(gòu)造函數(shù)
        Intent resultIntent = new Intent(this, UpdateActivity.class);
        PendingIntent pi = PendingIntent.getActivity(this, REQ_CODE, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        mBuilder.setSmallIcon(R.mipmap.ic_launcher_round)
                .setContentTitle("Title")
                .setContentText("Hello,World")
                .setContentIntent(pi)
                .setAutoCancel(true);
        mManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        mManager.notify(NOTIFICATION_ID, mBuilder.build());

六. 帶有擴(kuò)展布局的通知

帶有擴(kuò)展布局的通知可以有一個(gè)展開的大視圖,MIUI中可以通過雙指下滑打開,原生系統(tǒng)中可以直接查看大視圖
PS:Android4.1以上才可用迎瞧,且不同Rom顯示效果都不一樣捷绑,以下截圖均為原生效果

  1. 擴(kuò)展布局種類:

    • InboxStyle:包含一系列String的大視圖

      • 方法列表:
        • setBigContentTitle:展開之后的標(biāo)題
        • setSummaryText :對(duì)添加的String數(shù)據(jù)的總結(jié),下圖中的+3more就是
        • addLine:添加一行數(shù)據(jù)
      • 效果:


        InboxStyle
    • BigPictureStyle

      • 方法列表:
        • setBigContentTitle:下圖中的This is big content title
        • setSummaryText:下圖中的This is summary text
        • bigLargeIcon:下圖中的右上角圖標(biāo)
        • bigPicture:下圖中的大圖片
      • 效果:


        BigPictureStyle
    • BigTextStyle

      • 方法列表:
        • bigText:要全部顯示出來的content內(nèi)容蚀浆,下圖中一長串文字就是
        • setBigContentTitle:下圖中This is big content title
        • setSummaryText:下圖中This is summary text
      • 效果:通知顯示的時(shí)候,對(duì)contentText默認(rèn)是顯示在一行的,而內(nèi)容要是過多則省略,于是就出來了這個(gè)Style张咳,會(huì)將所有文字都顯示出來


        BigTextStyle
    • MediaStyle

      • 注意:在使用該style之前要添加依賴:implementation 'com.android.support:support-media-compat:version'
      • 方法列表:
      • 效果:用來實(shí)現(xiàn)音樂播放器的Style
    • MessagingStyle

      • 方法列表:
      • 效果:可以在通知欄里面進(jìn)行發(fā)消息等操作
    • DecoratedCustomViewStyle

      • 方法列表:
      • 效果:由系統(tǒng)裝飾的自定義視圖的通知樣式。自定義通知常空,但不是完全的自定義蝗蛙,相當(dāng)于利用系統(tǒng)的裝飾進(jìn)行自定義
    • DecoratedMediaCustomViewStyle

      • 方法列表:
      • 效果:
  2. 創(chuàng)建擴(kuò)展布局通知的步驟:

    • 和普通通知一樣,實(shí)例化Builder,設(shè)置三要素
    • 新建一個(gè)NotificationCompatStyle(Style就是用來設(shè)置展開布局的)恶耽,給Style進(jìn)行一系列對(duì)應(yīng)的設(shè)置
    • 調(diào)用Builder.setStyle方法設(shè)置style
    • notify進(jìn)行顯示即可

七. 管理通知

八. 8.0通知渠道適配

前言:8.0對(duì)通知渠道進(jìn)行了較為強(qiáng)硬的要求驻债,不帶有通知渠道的通知是不會(huì)顯示的了笙以。因此要?jiǎng)?chuàng)建通知渠道對(duì)其進(jìn)行適配

  1. 創(chuàng)建通知渠道
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            //創(chuàng)建了兩個(gè)通知渠道,聊天信息和推送信息蜡豹。兩個(gè)渠道的優(yōu)先級(jí)不同
            createNotificationChannel(CHAT_NOTIFICATION_CHANNEL, "聊天消息", NotificationManager.IMPORTANCE_HIGH);
            createNotificationChannel(SUBSCRIPTION_NOTIFICATION_CHANNEL, "推送信息", NotificationManager.IMPORTANCE_DEFAULT);
        }

/**
     * 創(chuàng)建通知渠道
     * @param id 渠道id凤巨,可以為任意字符串。保證全局唯一性即可
     * @param name 通知渠道名稱较雕,會(huì)顯示給用戶亮蒋,用戶可以對(duì)該渠道進(jìn)行操作
     * @param importance 通知渠道優(yōu)先級(jí)
     */
    @RequiresApi(api = Build.VERSION_CODES.O)
    private void createNotificationChannel(String id, String name, int importance) {
        NotificationChannel channel = new NotificationChannel(id, name, importance);
        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        manager.createNotificationChannel(channel);
    }
  1. 創(chuàng)建通知的時(shí)候指定通知渠道
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            Toast.makeText(this, "8.0以上", Toast.LENGTH_SHORT).show();
            Notification notification = new Notification.Builder(this,CHAT_NOTIFICATION_CHANNEL)//就在這里指定渠道
                    .setSmallIcon(R.mipmap.ic_launcher_round)
                    .setContentTitle("聊天消息")
                    .setContentText("今天中午吃啥")
                    .setWhen(System.currentTimeMillis())
                    .build();
            manager.notify(1, notification);
        } else {
            Toast.makeText(this, "8.0以下", Toast.LENGTH_SHORT).show();
            Notification notification = new Notification.Builder(this)
                    .setSmallIcon(R.mipmap.ic_launcher_round)
                    .setContentTitle("聊天消息")
                    .setContentText("今天中午吃啥")
                    .setWhen(System.currentTimeMillis())
                    .build();
            manager.notify(1, notification);
        }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末示括,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌矿酵,老刑警劉巖敞咧,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件测砂,死亡現(xiàn)場離奇詭異存璃,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)褂痰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門归薛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事主籍∠捌叮” “怎么了?”我有些...
    開封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵千元,是天一觀的道長苫昌。 經(jīng)常有香客問我,道長幸海,這世上最難降的妖魔是什么蜡歹? 我笑而不...
    開封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮涕烧,結(jié)果婚禮上月而,老公的妹妹穿的比我還像新娘。我一直安慰自己议纯,他們只是感情好父款,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瞻凤,像睡著了一般憨攒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上阀参,一...
    開封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天肝集,我揣著相機(jī)與錄音,去河邊找鬼蛛壳。 笑死杏瞻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的衙荐。 我是一名探鬼主播捞挥,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼忧吟!你這毒婦竟也來了砌函?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤溜族,失蹤者是張志新(化名)和其女友劉穎讹俊,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體煌抒,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仍劈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了摧玫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耳奕。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绑青,死狀恐怖诬像,靈堂內(nèi)的尸體忽然破棺而出屋群,到底是詐尸還是另有隱情,我是刑警寧澤坏挠,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布芍躏,位于F島的核電站,受9級(jí)特大地震影響降狠,放射性物質(zhì)發(fā)生泄漏对竣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一榜配、第九天 我趴在偏房一處隱蔽的房頂上張望否纬。 院中可真熱鬧,春花似錦蛋褥、人聲如沸临燃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽膜廊。三九已至,卻和暖如春淫茵,著一層夾襖步出監(jiān)牢的瞬間爪瓜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來泰國打工匙瘪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铆铆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓丹喻,卻偏偏與公主長得像算灸,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子驻啤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

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