Android中通知欄的用法

NO IMAGE

一直也沒有寫過通知欄的用法,今天學習正好看到這裡,所以在這裡進行一下總結。

1.Notification.Builder的相關方法

  • setWhen:設置推送時間,格式為“小時:分鐘”。推送時間在通知欄右方顯示。
  • setShowWhen:設置是否顯示推送時間。
  • setUsesShronometer:設置是否顯示計時器。為true時不顯示推送時間,動態顯示從通知被推送到當前的時間間隔,以“分鐘:秒鐘”格式顯示。
  • setSmallIcon:設置狀態欄裡面的圖標(小圖標)。
  • setTicker:設置狀態欄裡面的提示文字。
  • setLargeIcon:設置通知欄裡面的圖標(大圖標)。
  • setContentTitle:設置通知欄裡面的標題文字。
  • setContentText:設置通知欄裡面的內容文本。
  • setSubText:設置通知欄裡面的附加說明文本,位於內容文本下方。若調傭該方法,則setProgress的設置失效。
  • setProgress:設置進度條與當前進度。進度條位於標題文本與內容文本中間。
  • setNumber:設置通知欄右下方的數字,可與setProgress聯合使用,表示當前的進度數值。
  • setContentInfo:設置通知欄右下方的文本。若調用該方法,則setNumber的設置失效。
  • setContentIntent:設置內容的延遲意圖PendingIntent,點擊該通知觸發該意圖。通常調用PendingIntent的getActivity方法獲得延遲意圖對象,getActivity表示點擊後跳轉到該頁面。
  • setDeleteIntent:設置刪除的延遲意圖PendingIntent,滑掉該通知時觸發該動作。
  • setAutoCancel:設置該通知是否自動清除。若為true,則點擊通知後,通知會自動消失,若為flase,則點擊該通知後,通知不會消失。
  • setContent:設置一個定製的通知欄視圖RemoteViews,用於取代Builder的默認視圖模板。
  • build:構建方法。在以上參數都設置完畢後,調用該方法返回Notification對象。

2.上述方法使用注意事項

  • setSmallIcon方法必須調用,否則不會顯示通知消息。
  • setWhen與setUsesChronometer同時只能調用其中一個,即推送時間與計數器無法同時顯示,因為它們都位於通知欄右邊。
  • setSubText與setProgress同時只能調用其中一個,因為附加說明與進度條都位於標題文本下方。
  • setNumber與setContentInfo同時只能調用其中一個,因為計數值與提示都位於通知欄右下方。

3.NotificationManager的相關方法

  • notify:推送指定消息到通知欄
  • cancel:取消指定消息。調用該方法後,通知欄中的指定消息將消失
  • cancelAll:取消所有消息(待續)

4.普通消息示例

    private void sendSimpleNotify(String title,String message){
count++;
//從系統服務中獲取通知管理器
NotificationManager notifyMgr = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
//調用後只有8.0以上執行
createNotifyChannel(notifyMgr,this,"channel_id");
//創建一個跳轉到活動頁面的意圖
Intent clickIntent = new Intent(this,MessageActivity.class);
clickIntent.putExtra("flag",count);
//創建一個用於頁面跳轉的延遲意圖
PendingIntent contentIntent = PendingIntent.getActivity(this,count,clickIntent
,PendingIntent.FLAG_UPDATE_CURRENT);
//創建一個通知消息的構造器
Notification.Builder builder = new Notification.Builder(this);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
//Android8.0開始必須給每個通知分配對應的渠道
builder = new Notification.Builder(this,"channel_id");
}
builder.setContentIntent(contentIntent)//設置內容的點擊意圖
.setAutoCancel(true)//設置是否允許自動清除
.setSmallIcon(R.mipmap.ic_launcher)//設置狀態欄裡的小圖標
.setTicker("提示消息來啦")//設置狀態欄裡面的提示文本
.setWhen(System.currentTimeMillis())//設置推送時間,格式為"小時:分鐘"
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))//設置通知欄裡面的大圖標
.setContentTitle(title)//設置通知欄裡面的標題文本
.setContentText(message);//設置通知欄裡面的內容文本
//根據消息構造器創建一個通知對象
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
Notification notify = builder.build();
//使用通知管理器推送通知,然後在手機的通知欄就會看到消息
notifyMgr.notify(count,notify);
}
}
/**
* 創建通知渠道,Android8.0開始必須給每個通知分配對應的渠道
* @param notifyMgr
* @param ctx
* @param channelId
*/
private void createNotifyChannel(NotificationManager notifyMgr,Context ctx,String channelId){
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
//創建一個默認重要性的通知渠道
NotificationChannel channel = new NotificationChannel(channelId,"Channel",NotificationManager.IMPORTANCE_DEFAULT);
channel.setSound(null,null);
channel.setShowBadge(true);
channel.canBypassDnd();//可否繞過請勿打擾模式
channel.enableLights(true);//閃光
channel.setLockscreenVisibility(Notification.VISIBILITY_SECRET);//鎖屏顯示通知
channel.setLightColor(Color.RED);//指定閃光時的燈光顏色
channel.canShowBadge();//桌面ICON是否可以顯示角標
channel.enableVibration(true);//是否可以震動
channel.getGroup();//獲取通知渠道組
channel.setVibrationPattern(new long[]{100,100,200});//震動的模式
channel.shouldShowLights();//是否會閃光
notifyMgr.createNotificationChannel(channel);
}
}

這裡注意我們用到一個count的變量,用來區分每一條消息,所以count一定要有變化,否則回覆蓋掉之前的一條。

5.計時消息示例

    private void sendSimpleNotify(String title,String message){
count++;
//從系統服務中獲取通知管理器
NotificationManager notifyMgr = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
//調用後只有8.0以上執行
createNotifyChannel(notifyMgr,this,"channel_id");
//創建一個跳轉到活動頁面的意圖
Intent clickIntent = new Intent(this,MessageActivity.class);
clickIntent.putExtra("flag",count);
//創建一個用於頁面跳轉的延遲意圖
PendingIntent contentIntent = PendingIntent.getActivity(this,count,clickIntent
,PendingIntent.FLAG_UPDATE_CURRENT);
//創建一個通知消息的構造器
Notification.Builder builder = new Notification.Builder(this);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
//Android8.0開始必須給每個通知分配對應的渠道
builder = new Notification.Builder(this,"channel_id");
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
builder.setContentIntent(contentIntent)//設置內容的點擊意圖
.setAutoCancel(false)//設置是否允許自動清除
.setUsesChronometer(true)//設置是否顯示計數器
.setProgress(100,60,false)//設置進度條與當前進度
.setNumber(99)//設置通知欄右下方的數字
.setSmallIcon(R.mipmap.ic_launcher)//設置狀態欄裡的小圖標
.setTicker("提示消息來啦")//設置狀態欄裡面的提示文本
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))//設置通知欄裡面的大圖標
.setContentTitle(title)//設置通知欄裡面的標題文本
.setContentText(message);//設置通知欄裡面的內容文本
//根據消息構造器創建一個通知對象
Notification notify = builder.build();
//使用通知管理器推送通知,然後在手機的通知欄就會看到消息
notifyMgr.notify(count,notify);
}
}
/**
* 創建通知渠道,Android8.0開始必須給每個通知分配對應的渠道
* @param notifyMgr
* @param ctx
* @param channelId
*/
private void createNotifyChannel(NotificationManager notifyMgr,Context ctx,String channelId){
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
//創建一個默認重要性的通知渠道
NotificationChannel channel = new NotificationChannel(channelId,"Channel",NotificationManager.IMPORTANCE_DEFAULT);
channel.setSound(null,null);
channel.setShowBadge(true);
channel.canBypassDnd();//可否繞過請勿打擾模式
channel.enableLights(true);//閃光
channel.setLockscreenVisibility(Notification.VISIBILITY_SECRET);//鎖屏顯示通知
channel.setLightColor(Color.RED);//指定閃光時的燈光顏色
channel.canShowBadge();//桌面ICON是否可以顯示角標
channel.enableVibration(true);//是否可以震動
channel.getGroup();//獲取通知渠道組
channel.setVibrationPattern(new long[]{100,100,200});//震動的模式
channel.shouldShowLights();//是否會閃光
notifyMgr.createNotificationChannel(channel);
}
}

通知相關的內容今天就說這麼多了。如果小夥伴們有疑問可以在評論區和我討論。

相關文章

DAY5:你必須知道的java虛擬機之類篇——類文件的加載(1)

在2021年你需要掌握的7種關於JavaScript的數組方法

🏆技術專題第九期|聊聊了不起的Deno

MySQL架構演進從主從複製到分庫分表