Android編程之通知欄的用法小結(jié)
本文實例總結(jié)了Android編程中通知欄的用法。分享給大家供大家參考,具體如下:
很久沒有使用Android的通知功能了,今天把兩年前的代碼搬出來一看,發(fā)現(xiàn)很多方法都廢棄了,代碼中各種刪除線看的十分不爽。于是乎,打開Google,查看官方文檔,學(xué)習(xí)最新的發(fā)送通知欄消息的方法。
本文中的代碼均參照谷歌官方文檔編寫:
http://developer.android.com/guide/topics/ui/notifiers/notifications.html
1.首先,獲取系統(tǒng)的通知服務(wù):
2.發(fā)送一個最簡單的通知
public void simpleNotice(View view) {
//此Builder為android.support.v4.app.NotificationCompat.Builder中的,下同。
Builder mBuilder = new Builder(this);
//系統(tǒng)收到通知時,通知欄上面顯示的文字。
mBuilder.setTicker("天津,晴,2~15度,微風(fēng)");
//顯示在通知欄上的小圖標(biāo)
mBuilder.setSmallIcon(R.drawable.consult_answer);
//通知標(biāo)題
mBuilder.setContentTitle("天氣預(yù)報");
//通知內(nèi)容
mBuilder.setContentText("天津,晴,2~15度,微風(fēng)");
//設(shè)置大圖標(biāo),即通知條上左側(cè)的圖片(如果只設(shè)置了小圖標(biāo),則此處會顯示小圖標(biāo))
mBuilder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.share_sina));
//顯示在小圖標(biāo)左側(cè)的數(shù)字
mBuilder.setNumber(6);
//設(shè)置為不可清除模式
mBuilder.setOngoing(true);
//顯示通知,id必須不重復(fù),否則新的通知會覆蓋舊的通知(利用這一特性,可以對通知進(jìn)行更新)
nm.notify(1, mBuilder.build());
}
3.刪除一個通知。參數(shù)即為通知的id
nm.cancel(1);
4.發(fā)送一個通知,點擊通知后跳轉(zhuǎn)到一個Activity,從這個Activity返回后,進(jìn)入程序內(nèi)的某一個頁面(一般為主頁)
//點擊通知進(jìn)入一個Activity,點擊返回時進(jìn)入指定頁面。
public void resultActivityBackApp(View view) {
Builder mBuilder = new Builder(this);
mBuilder.setTicker("通知標(biāo)題2");
mBuilder.setSmallIcon(R.drawable.ic_launcher);
mBuilder.setContentTitle("通知標(biāo)題2");
mBuilder.setContentText("點擊通知進(jìn)入一個Activity,點擊返回時進(jìn)入指定頁面。");
//設(shè)置點擊一次后消失(如果沒有點擊事件,則該方法無效。)
mBuilder.setAutoCancel(true);
//點擊通知之后需要跳轉(zhuǎn)的頁面
Intent resultIntent = new Intent(this, ResultActivityBackApp.class);
//使用TaskStackBuilder為“通知頁面”設(shè)置返回關(guān)系
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
//為點擊通知后打開的頁面設(shè)定 返回 頁面。(在manifest中指定)
stackBuilder.addParentStack(ResultActivityBackApp.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent pIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(pIntent);
// mId allows you to update the notification later on.
nm.notify(2, mBuilder.build());
}
同時,需要在manifest中為點擊通知后打開的Activity指定父Activity.
<activity
android:name=".ResultActivityBackApp"
android:parentActivityName=".MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
(其中,activity的屬性parentActivityName為API 16中的屬性,meta-data中的代碼為兼容API 16以下。因此,對于大多數(shù)程序,這兩個地方都得寫。)
5.和上述4類似,只是在打開的Activity中返回時回到home頁
//點擊通知進(jìn)入一個Activity,點擊返回時回到桌面
public void resultActivityBackHome(View view) {
Builder mBuilder = new Builder(this);
mBuilder.setTicker("通知標(biāo)題3");
mBuilder.setSmallIcon(R.drawable.ic_launcher);
mBuilder.setContentTitle("通知標(biāo)題3");
mBuilder.setContentText("點擊通知進(jìn)入一個Activity,點擊返回時回到桌面");
//設(shè)置點擊一次后消失(如果沒有點擊事件,則該方法無效。)
mBuilder.setAutoCancel(true);
Intent notifyIntent = new Intent(this, ResultActivityBackHome.class);
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pIntent = PendingIntent.getActivity(this, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(pIntent);
nm.notify(3, mBuilder.build());
}
6.帶進(jìn)度條的通知
public void progressNotice(View view) {
final Builder mBuilder = new Builder(this);
mBuilder.setTicker("通知標(biāo)題4");
mBuilder.setContentTitle("Picture Download")
.setContentText("Download in progress")
.setSmallIcon(R.drawable.ic_launcher);
// Start a lengthy operation in a background thread
new Thread(new Runnable() {
@Override
public void run() {
int progress;
for (progress = 0; progress <= 100; progress++) {
// Sets the progress indicator to a max value, the current completion percentage,
// and "determinate" state
mBuilder.setProgress(100, progress, false);
//不明確進(jìn)度的進(jìn)度條
// mBuilder.setProgress(0, 0, true);
nm.notify(4, mBuilder.build());
// 模擬延時
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// When the loop is finished, updates the notification
mBuilder.setContentText("Download complete");
// Removes the progress bar
mBuilder.setProgress(0, 0, false);
nm.notify(4, mBuilder.build());
}
}
).start();
}
7.擴(kuò)展布局的通知。按住通知條下滑,可以查看更詳細(xì)的內(nèi)容
public void expandLayoutNotice(View view) {
Builder mBuilder = new Builder(this);
mBuilder.setTicker("通知標(biāo)題5");
mBuilder.setSmallIcon(R.drawable.ic_launcher);
mBuilder.setContentTitle("通知標(biāo)題5");
mBuilder.setContentText("按住通知下拉可顯示擴(kuò)展布局");
NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
String[] events = new String[]{"Beijing", "Tianjin", "Shanghai", "Guangzhou"};
// 設(shè)置擴(kuò)展布局的標(biāo)題
inboxStyle.setBigContentTitle("Event tracker details:");
for (String s : events) {
inboxStyle.addLine(s);
}
mBuilder.setStyle(inboxStyle);
nm.notify(5, mBuilder.build());
}
8.自定義布局的通知欄。(根據(jù)谷歌的官方文檔不推薦這么做,因為使用這種方式時,對不同屏幕進(jìn)行適配需要考慮的因素太多。而且,通知欄應(yīng)該展示的就是最簡明扼要的信息,對于大多數(shù)程序默認(rèn)的布局已經(jīng)足夠了。)
//自定義布局的通知
public void customLayoutNotice(View view) {
Builder mBuilder = new Builder(this);
mBuilder.setTicker("通知標(biāo)題6");
mBuilder.setTicker("通知標(biāo)題6");
mBuilder.setSmallIcon(R.drawable.ic_launcher);
RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.custom_layout_notice);
mBuilder.setContent(remoteViews);
//為RemoteViews上的按鈕設(shè)置文字
remoteViews.setCharSequence(R.id.custom_layout_button1, "setText", "Button1");
remoteViews.setCharSequence(R.id.custom_layout_button2, "setText", "Button2");
//為RemoteViews上的按鈕設(shè)置點擊事件
Intent intent1 = new Intent(this, CustomLayoutResultActivity.class);
intent1.putExtra("content", "From button1 click!");
PendingIntent pIntentButton1 = PendingIntent.getActivity(this, 0, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.custom_layout_button1, pIntentButton1);
Intent intent2 = new Intent(this, CustomLayoutResultActivity.class);
intent2.putExtra("content", "From button2 click!");
PendingIntent pIntentButton2 = PendingIntent.getActivity(this, 1, intent2, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.custom_layout_button2, pIntentButton2);
nm.notify(6, mBuilder.build());
}
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android開發(fā)入門與進(jìn)階教程》、《Android調(diào)試技巧與常見問題解決方法匯總》、《Android多媒體操作技巧匯總(音頻,視頻,錄音等)》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對大家Android程序設(shè)計有所幫助。
- Android 8.0系統(tǒng)中通知欄的適配微技巧
- Android通知欄微技巧一些需要注意的小細(xì)節(jié)
- Android編程實現(xiàn)通知欄進(jìn)度條效果的方法示例
- Android開發(fā)實現(xiàn)判斷通知欄是否打開及前往設(shè)置頁面的方法
- Android之開發(fā)消息通知欄
- 詳解Android通知欄沉浸式/透明化完整解決方案
- 關(guān)于Android中點擊通知欄的通知啟動Activity問題解決
- Android編程實現(xiàn)上方通知欄里閃動效果的方法
- Android 使用AlarmManager和NotificationManager來實現(xiàn)鬧鐘和通知欄
- android使用NotificationListenerService監(jiān)聽通知欄消息
- Android種使用Notification實現(xiàn)通知管理以及自定義通知欄實例(示例四)
- Android 8.0系統(tǒng)中通知欄的適配詳解
相關(guān)文章
Android WebView基礎(chǔ)應(yīng)用詳解
這篇文章主要為大家介紹了Android中WebView這一控件的基礎(chǔ)應(yīng)用,例如:播放音樂,播放視頻等,文中的示例代碼講解詳細(xì),對于我們了解WebView很有幫助,需要的同學(xué)可以學(xué)習(xí)一下2021-12-12
使用RadioButton+Fragment實現(xiàn)底部導(dǎo)航欄效果
這篇文章主要為大家詳細(xì)介紹了使用RadioButton+Fragment實現(xiàn)底部導(dǎo)航欄效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-06-06
詳解基于Android的Appium+Python自動化腳本編寫
這篇文章主要介紹了詳解基于Android的Appium+Python自動化腳本編寫,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
android H5本地緩存加載優(yōu)化的實戰(zhàn)
這篇文章主要介紹了android H5本地緩存加載優(yōu)化的實戰(zhàn),幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下2021-04-04
Android 8.0系統(tǒng)中應(yīng)用圖標(biāo)的適配微技巧
這篇文章主要介紹了Android 8.0系統(tǒng)中應(yīng)用圖標(biāo)的適配微技巧 ,需要的朋友可以參考下2018-04-04
Android中給fragment寫入?yún)?shù)的輕量開發(fā)包FragmentArgs簡介
這篇文章主要介紹了Android中給fragment寫入?yún)?shù)的輕量開發(fā)包FragmentArgs簡介,需要的朋友可以參考下2014-10-10
Android?進(jìn)入Activity時如何禁止彈出軟鍵盤輸入法
這篇文章主要介紹了Android?進(jìn)入Activity時如何禁止彈出軟鍵盤輸入法,文章圍繞主題展開具體內(nèi)容,需要的小伙伴可以參考一下2022-05-05

