Android通知- Android開發教學 - 極客書
文章推薦指數: 80 %
setContentText("Hi, This is Android Notification Detail!"); 通知有很多可選的屬性,可以設置。
要更多地了解它們,請參考NotificationCompat.Builder 文檔。
第 ...
Java
Python
Ruby
MySQL
位置:首頁>手機開發>Android開發教學>Android通知
Android開發教學
Android開發環境配置Android架構Android應用組件AndroidHelloWorld示例Android資源組織和訪問AndroidActivityAndroidServiceAndroid廣播接收器Android內容提供者Android碎片/片段AndroidIntent過濾器
高級教學
AndroidUI布局AndroidUI控件Android事件處理Android樣式和主題Android自定義組件Android拖放Android通知Android基於位置服務Android發送電子郵件Android發送短信/SMSAndroid撥打電話發布Android應用
實用實例
AndroidAlertdialog(警告對話框)AndroidAnimation(動畫)實例Android音頻捕獲(錄音)Android音頻管理器實例AndroidAutoCompleteTextView(自動完成)實例Android最佳實踐AndroidBluetooth(藍牙)實例AndroidCamera(攝像頭)AndroidClipboard(複製/剪貼板)Android自定義字體Android數據備份AndroidGestures/手勢Android圖片效果Android圖片切換Android內部存儲AndroidJetPlayer實例AndroidJSON解析器Android加載SpinnerAndroid本地化Android登錄實例AndroidMediaPlayer(多媒體播放)
Android通知
上一篇
下一篇
Android的Toast 類提供了一個方便的方式來顯示用戶的警告信息,但這些警告不是持久性的,這意味著警告閃爍在屏幕上幾秒鐘後就消失了。
對於特彆重要的要提供給用戶的消息,需要有更持久性的方法。
Anotification是一種消息可以顯示在設備的頂部的通知欄或狀態欄中。
要看到通知的細節,選擇圖標顯示通知抽屜裡有詳細的有關通知。
模擬器虛擬設備工作,按一下向下拖動狀態欄將它展開,將顯示詳細信息如下。
這將是64sp高的普通視圖。
上述擴大的形式可以放到一個大的視圖,有關通知的更多細節。
可以添加最多六行的通知。
下麵的截圖顯示了這樣的通知。
創建和發送通知
使用簡單的方法來創建一個通知。
按照以下步驟在應用程序創建一個通知:
第1步-創建通知生成器
作為第一步創建一個通知構造器,使用NotificationCompat.Builder.build()。
使用通知Builder來設置屬性,如各種通知其小型和大型圖標,標題,優先級等。
NotificationCompat.BuildermBuilder=newNotificationCompat.Builder(this)
第2步-設置通知屬性
在創建Builder對象之後,可以按要求使用生成器創建通知對象。
這是強製性的,以至少下列設置:
一個小圖標,由 setSmallIcon() 設置
一個標題,由setContentTitle()設置
詳細內容由setContentText()設置
mBuilder.setSmallIcon(R.drawable.notification_icon);
mBuilder.setContentTitle("NotificationAlert,ClickMe!");
mBuilder.setContentText("Hi,ThisisAndroidNotificationDetail!");
通知有很多可選的屬性,可以設置。
要更多地了解它們,請參考NotificationCompat.Builder文檔。
第3步-動作附加
這是一個可選的部分,並要求如果要附加一個動作的通知。
動作可以讓用戶直接從通知到應用程序中的活動,在那裡它們可以在一個或多個事件,或做進一步的工作。
動作定義通過PendingIntent在應用程序中的活動意圖。
要關聯PendingIntent手勢請調用適當NotificationCompat.Builder方法。
例如,如果想開始活動,當用戶點擊通知文本通知抽屜PendingIntent調用setContentIntent()。
PendingIntent對象表示應用程序的執行一個動作,在以後的時間裡查看應用程序是否正在運行。
堆棧builder對象將包含一個人工後退堆棧活動。
確保向後導航的活動在應用程序的主屏幕。
IntentresultIntent=newIntent(this,ResultActivity.class);
TaskStackBuilderstackBuilder=TaskStackBuilder.create(this);
stackBuilder.addParentStack(ResultActivity.class);
//AddstheIntentthatstartstheActivitytothetopofthestack
stackBuilder.addNextIntent(resultIntent);
PendingIntentresultPendingIntent=
stackBuilder.getPendingIntent(
0,
PendingIntent.FLAG_UPDATE_CURRENT
);
mBuilder.setContentIntent(resultPendingIntent);
第4步-發出通知
最後,調用NotificationManager.notify()發送通知,通知對象傳遞到係統。
通知之前,確保調用NotificationCompat.Builder.build()方法生成器對象。
這種方法結合了所有的選擇,設置並返回一個新的Notificationobject。
NotificationManagermNotificationManager=
(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
//notificationIDallowsyoutoupdatethenotificationlateron.
mNotificationManager.notify(notificationID,mBuilder.build());
NotificationCompat.Builder類
NotificationCompat.Builder類可以更容易控製標誌,以及幫助構建典型通知布局。
以下是 NotificationCompat.Builder類的一些重要的和最常用的方法的一部分。
S.N.
常量&描述
1
Notificationbuild()
結合所有已設置的選項,並返回一個新的Notification 對象
2
NotificationCompat.BuildersetAutoCancel(booleanautoCancel)
設置此標誌將使它以便當用戶點擊它在麵板中的通知被自動取消
3
NotificationCompat.BuildersetContent(RemoteViewsviews)
提供定製RemoteViews使用來代替標準之一
4
NotificationCompat.BuildersetContentInfo(CharSequenceinfo)
設置大文本的通知的右側
5
NotificationCompat.BuildersetContentIntent(PendingIntentintent)
提供一個PendingIntent通知被點擊時發出
6
NotificationCompat.BuildersetContentText(CharSequencetext)
設置通知的文本(第二行),在一個標準的通知
7
NotificationCompat.BuildersetContentTitle(CharSequencetitle)
設置通知的文本(第一行),在一個標準的通知
8
NotificationCompat.BuildersetDefaults(intdefaults)
設置將要使用的默認通知選項
9
NotificationCompat.BuildersetLargeIcon(Bitmapicon)
設置顯示在自動收報機和通知大圖標
10
NotificationCompat.BuildersetNumber(intnumber)
在通知的右側設置大的數字
11
NotificationCompat.BuildersetOngoing(booleanongoing)
設置這是否是一個持續的通知
12
NotificationCompat.BuildersetSmallIcon(inticon)
設置小圖標在通知使用布局
13
NotificationCompat.BuildersetStyle(NotificationCompat.Stylestyle)
在構建時應用添加豐富的通知樣式
14
NotificationCompat.BuildersetTicker(CharSequencetickerText)
設置在第一個通知到達時顯示在狀態欄中的文本
15
NotificationCompat.BuildersetVibrate(long[]pattern)
設置振動模式的使用
16
NotificationCompat.BuildersetWhen(longwhen)
設置該事件發生的時間。
在麵板的通知是由這個時間進行排序
示例
以下示例顯示Android的通知功能,NotificationCompat.Builder類已在Android4.1中引入。
步驟
描述
1
使用AndroidStudio創建一個Android應用程序,並將它命名為:NotificationDemounder。
在創建這個項目時確保目標SDK和編譯在AndroidSDK的最新版本或更高級彆的API。
2
修改 src/MainActivity.java 文件,並添加定義三種方法startNotification(),cancelNotification()和updateNotification(),以涵蓋與Android的通知的最大功能的代碼。
3
創建一個新的src/NotificationView.java,這將被用於顯示新的布局作為新的活動將被啟動的一部分,當用戶將點擊通知
4
複製圖片woman.png在RES/drawable-*文件夾,這個圖片將被用作通知圖標。
可以使用的情況下,要為他們提供了不同的設備有不同的分辨率的圖片
5
修改布局XML文件 res/layout/activity_main.xml 添加三個按鈕的線性布局
6
創建一個新的布局XML文件 res/layout/notification.xml。
這將被用來作為布局文件為新的活動,將啟動時用戶將點擊任何通知
7
修改 res/values/strings.xml 中定義所需的恒定值
8
運行該應用程序時啟動Android模擬器並驗證應用程序所做的修改結果
以下是修改主要活動文件src/com.yiibai.notificationdemo/MainActivity.java 的內容。
這個文件可以包括每個生命周期基本方法。
packagecom.example.notificationdemo;
importandroid.os.Bundle;
importandroid.app.Activity;
importandroid.app.NotificationManager;
importandroid.app.PendingIntent;
importandroid.app.TaskStackBuilder;
importandroid.content.Context;
importandroid.content.Intent;
importandroid.support.v4.app.NotificationCompat;
importandroid.util.Log;
importandroid.view.View;
importandroid.widget.Button;
publicclassMainActivityextendsActivity{
privateNotificationManagermNotificationManager;
privateintnotificationID=100;
privateintnumMessages=0;
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButtonstartBtn=(Button)findViewById(R.id.start);
startBtn.setOnClickListener(newView.OnClickListener(){
publicvoidonClick(Viewview){
displayNotification();
}
});
ButtoncancelBtn=(Button)findViewById(R.id.cancel);
cancelBtn.setOnClickListener(newView.OnClickListener(){
publicvoidonClick(Viewview){
cancelNotification();
}
});
ButtonupdateBtn=(Button)findViewById(R.id.update);
updateBtn.setOnClickListener(newView.OnClickListener(){
publicvoidonClick(Viewview){
updateNotification();
}
});
}
protectedvoiddisplayNotification(){
Log.i("Start","notification");
/*Invokingthedefaultnotificationservice*/
NotificationCompat.BuildermBuilder=
newNotificationCompat.Builder(this);
mBuilder.setContentTitle("NewMessage");
mBuilder.setContentText("You'vereceivednewmessage.");
mBuilder.setTicker("NewMessageAlert!");
mBuilder.setSmallIcon(R.drawable.woman);
/*Increasenotificationnumbereverytimeanewnotificationarrives*/
mBuilder.setNumber(++numMessages);
/*CreatesanexplicitintentforanActivityinyourapp*/
IntentresultIntent=newIntent(this,NotificationView.class);
TaskStackBuilderstackBuilder=TaskStackBuilder.create(this);
stackBuilder.addParentStack(NotificationView.class);
/*AddstheIntentthatstartstheActivitytothetopofthestack*/
stackBuilder.addNextIntent(resultIntent);
PendingIntentresultPendingIntent=
stackBuilder.getPendingIntent(
0,
PendingIntent.FLAG_UPDATE_CURRENT
);
mBuilder.setContentIntent(resultPendingIntent);
mNotificationManager=
(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
/*notificationIDallowsyoutoupdatethenotificationlateron.*/
mNotificationManager.notify(notificationID,mBuilder.build());
}
protectedvoidcancelNotification(){
Log.i("Cancel","notification");
mNotificationManager.cancel(notificationID);
}
protectedvoidupdateNotification(){
Log.i("Update","notification");
/*Invokingthedefaultnotificationservice*/
NotificationCompat.BuildermBuilder=
newNotificationCompat.Builder(this);
mBuilder.setContentTitle("UpdatedMessage");
mBuilder.setContentText("You'vegotupdatedmessage.");
mBuilder.setTicker("UpdatedMessageAlert!");
mBuilder.setSmallIcon(R.drawable.woman);
/*Increasenotificationnumbereverytimeanewnotificationarrives*/
mBuilder.setNumber(++numMessages);
/*CreatesanexplicitintentforanActivityinyourapp*/
IntentresultIntent=newIntent(this,NotificationView.class);
TaskStackBuilderstackBuilder=TaskStackBuilder.create(this);
stackBuilder.addParentStack(NotificationView.class);
/*AddstheIntentthatstartstheActivitytothetopofthestack*/
stackBuilder.addNextIntent(resultIntent);
PendingIntentresultPendingIntent=
stackBuilder.getPendingIntent(
0,
PendingIntent.FLAG_UPDATE_CURRENT
);
mBuilder.setContentIntent(resultPendingIntent);
mNotificationManager=
(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
/*UpdatetheexistingnotificationusingsamenotificationID*/
mNotificationManager.notify(notificationID,mBuilder.build());
}
}
以下是修改的主活動文件的內容 src/com.yiibai.notificationdemo/NotificationView.java.
packagecom.example.notificationdemo;
importandroid.os.Bundle;
importandroid.app.Activity;
publicclassNotificationViewextendsActivity{
@Override
publicvoidonCreate(BundlesavedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.notification);
}
}
下麵文件 res/layout/activity_main.xml 的內容如下:
AVD安裝的應用程序,並啟動它,如果一切設置和應用都冇有問題,它會顯示以下模擬器窗口:
現在單擊“StartNotification”通知按鈕,會看到在上麵的一條消息“NewMessageAlert!”將短暫顯示後,將有下麵的屏幕左上角有一個小圖標。
現在,讓我們展開視圖,長按小圖標,一秒鐘後它會顯示日期信息,這是時間的時候,應該釋放鼠標拖動狀態欄的情況下。
會看到狀態欄將擴大,會得到以下畫麵:
現在,讓我們嘗試在圖像上點擊圖標,這將啟動新的活動,已設置使用的意圖,將有以下屏幕:
接下來,可以點擊“Detailofnotification”,將帶回到主屏幕,可以嘗試使用更新通知按鈕,將更新現有的通知和數量將增加1,但如果發送通知,新的通知ID會繼續增加在堆棧中,會看到他們在屏幕上單獨列示。
圖查看大圖通知
下麵的代碼片斷演示了如何改變的通知,上麵代碼中創建使用收件箱大視圖樣式。
要更新displayNotification()方法來顯示這個功能:
protectedvoiddisplayNotification(){
Log.i("Start","notification");
/*Invokingthedefaultnotificationservice*/
NotificationCompat.BuildermBuilder=
newNotificationCompat.Builder(this);
mBuilder.setContentTitle("NewMessage");
mBuilder.setContentText("You'vereceivednewmessage.");
mBuilder.setTicker("NewMessageAlert!");
mBuilder.setSmallIcon(R.drawable.woman);
/*Increasenotificationnumbereverytimeanewnotificationarrives*/
mBuilder.setNumber(++numMessages);
/*AddBigViewSpecificConfiguration*/
NotificationCompat.InboxStyleinboxStyle=
newNotificationCompat.InboxStyle();
String[]events=newString[6];
events[0]=newString("Thisisfirstline....");
events[1]=newString("Thisissecondline...");
events[2]=newString("Thisisthirdline...");
events[3]=newString("Thisis4thline...");
events[4]=newString("Thisis5thline...");
events[5]=newString("Thisis6thline...");
//SetsatitlefortheInboxstylebigview
inboxStyle.setBigContentTitle("BigTitleDetails:");
//Moveseventsintothebigview
for(inti=0;i
延伸文章資訊
- 1Android Notification 通知訊息| Android Fly程式筆記
Android Notification 通知訊息 · 1.Android8.0以上一定要設置Channel渠道. if (Build. · 2.一般通知 · 3.進度條通知 · 4.大圖片通知...
- 22.5.8 Notification(状态栏通知)详解 - 菜鸟教程
本节引言: 本节带来的是Android中用于在状态栏显示通知信息的控件:Notification,相信大部分学Android都对他都很熟悉,而网上很多关于Notification的使用教程都是 ...
- 3[Android] 25-1 Notification 通知簡介 - 給你魚竿- 痞客邦
Notification會出現在System bar上面主要的結構有三a. 小圖示, 用setSmaillIcon來設置b. 標題, 用setContentTitle來設置c. 內文, 用set...
- 4Day 28 - Notification通知 - iT 邦幫忙
Android初學筆記系列第28 篇. Ivan. 6 年前‧ 16057 瀏覽. 1. Notification是顯示在狀態列(Status bar)的訊息,並在展開後可以顯示更多內容,常用在...
- 5《Android》『NotificationManager』- 顯示通知訊息 ...
《Android》『NotificationManager』- 顯示通知訊息(Notifications)的基本用法 ... NotificationManager : 負責整個Android ...