Android基础知识(二十):Notification、提醒式通知(横幅)踩坑与通知界面设置跳转
Android基礎知識(二十):Notification、提醒式通知(橫幅)踩坑與通知界面設置跳轉
一、Notification通知與基本用法
通知Notification是Android系統中比較有特色的一個功能,當某個應用程序希望用戶發出一些提示消息,而該應用程序又不在前臺運行時,就可以借助通知來實現。
首先上代碼,如下為Notification的一個簡單的例子,其中使用NotificationManager來管理通知。通過設置通知的標題、通知內容、通知時間以及通知圖標等內容,設置該應用程序的通知樣式,并使用NotificationManager的notify方法顯示通知,其第一個參數為通知的id,用于唯一標識該通知;第二個參數為notification。
關于Notification常用的設置setXX()方法及其說明如下所示。其中的設置方法setContentIntent(PendingIntent)用于設置當點擊通知之后,將要跳轉的Activity,PendingIntent與Intent類似,但是前者更加傾向于在某個合適的時機去執行某個動作,而Intent則是傾向于立即執行某個動作。
對于PendingIntent的實例獲取中,Android提供了幾個靜態方法getActivity()、getBroadcast()、以及getService()方法。這幾個方法的參數是一致的,第一個參數為Context,第二個參數一般用不到,通常傳入0,第三個參數為Intent對象,通過該對象構建出PendingIntent的意圖,第四個參數用于確定PendingIntent的行為,有4個值可選
FLAG_ONE_SHOT:該PendingIntent只作用一次。在該PendingIntent對象通過send()方法觸發之后,將自動調用cancel進行銷毀。
FLAG_NO_CREATE:如果AlarmManager管理的PendingIntent已經存在,那么將不進行任何操作,直接返回。
FLAG_CANCEL_CURRENT:如果AlarmManager管理的PendingIntent已經存在,那么將會取消當前的PendingIntent,從而創建一個新的PendingIntent。
FLAG_UPDATE_CURRENT:如果AlarmManager管理的PendingIntent已經存在,讓新的Intent更新之前Intent對象數據。
二、Android 8.0消息通知適配
隨著Android版本的更新,其對消息通知也做出了更改,如上的代碼中可以看到當Android SDK的版本大于26時,原本的NotificationCompat.Builder(context)已經過時,并且在Android 8.0中,這樣使用的通知是無法顯示的。也就是說,在Android 8.0系統以上的手機使用上述代碼,通知完全無法顯示。
從Android 8.0系統開始,Google引入了通知渠道這個概念。通知渠道是指每條通知都要屬于一個對應的渠道,每個APP可以自由地創建當前APP擁有哪些通知渠道,但是這些通知渠道的控制權都是掌握在用戶手上的。用戶可以自由地選擇這些通知渠道的重要程度、是否響鈴、是否震動或者是否關閉這個渠道的通知。
因此,Android 8.0及其以上系統中,為了能夠顯示通知,需要做如下的通知適配。對NotificationManager設置一個渠道,并設置該渠道的ID、Name、渠道重要程度以及設置是否震動等。
通知渠道類NotificationChannel的常用設置方法setXXX()如下表所示。
此外,一個APP可以設置多個渠道,即多個NotificationChannel,如下所示,在應用中設置兩個通知渠道,分別命名為聊天通知消息,以及其他通知。
在手機中可以看到,該應用下的通知類別有聊天通知消息以及其他消息的通知渠道,用戶可以通過不同的渠道對該應用的不同通知類型進行設置。
三、消息通知填坑——提醒式通知
諸如微信,QQ等應用一樣,當應用程序有新的通知時候,Android系統會有提醒式通知。那么什么是提醒式通知呢?
從Android 5.0開始,通知可以短暫地顯示在浮動窗口中,稱之為提醒式通知。提醒式通知會在應用發出通知后立即出現,稍后便會消失,但仍顯示在抽屜式通知欄中。
可能會觸發提醒式通知的條件有如下3種:
? 用戶的Activiity處于全屏模式(應用使用fullScreenIntent)
? 通知的優先級很高,且在搭載Android 7.1(API級別25)及更低版本的設備上使用鈴聲或震動。
? 在搭載Android 8.0(API級別為26)及更高版本的設備上,通知渠道的重要程度比較高。
經過實踐,在小米手機中,設置用戶的Activity處于全屏模式即使用fullScreenIntent方法,無論其第二個參數是否為true,其都會自動跳轉到將要跳轉的Activity,并且即使設置了setAutoCancel(true),由于該跳轉不是點擊通知發生的,所以通知并不會消失。
前面在做Android 8.0通知適配中,設置了通知渠道的重要程度都為最高NotificationManager.IMPORTANCE_HIGH,但是依舊沒有提醒式通知。
據郭霖大神解釋,國產手機默認只給微信、QQ這類程序開橫幅(即提醒式通知),其余應用需要手動去設置里面選擇打開橫幅才會有,而之所以這么做一方面是和國內開發公司的素質相關,由于國內許多開發公司的APP根本不區分通知重要還是不重要,都會拉到最高權限,這是對用戶的一種傷害。
所以,在通知渠道設置了一大堆亂七八糟的東西,系統就丟給你一句:然并卵!!
四、通知設置界面跳轉
Android為開發者提供了管理讀取通知渠道配置的權限,如果某個功能必須按照指定要求來配置通知渠道才能使用,那么可以提示用戶手動更改通知渠道配置。
對于不同的Android版本,由于版本的不同其設置權限是不一樣的,所以需要對APP所運行的客戶端的Android版本進行判斷,并根據不同的版本調用不同的代碼進入到系統的通知設置界面。
第一張圖Android 8.1下通知渠道名為聊天通知消息的通知具體設置界面,而第二張圖為Android5.0至7.0之間的通知設置界面。
參考資料:《第一行代碼 Android 第2版》
Android通知欄微技巧,8.0系統中通知欄的適配
AndroidTotal/Android權限之通知、自啟動跳轉
總結
以上是生活随笔為你收集整理的Android基础知识(二十):Notification、提醒式通知(横幅)踩坑与通知界面设置跳转的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 水瓶是糖,甜到哀伤
- 下一篇: 利用jsoup解析网站网页