Android之Notification的多種用法

我們在用手機(jī)的時候耘柱,如果來了短信如捅,而我們沒有點(diǎn)擊查看的話,是不是在手機(jī)的最上邊的狀態(tài)欄里有一個短信的小圖標(biāo)提示暗骷濉镜遣?你是不是也想實(shí)現(xiàn)這種功能呢?今天的Notification就是解決這個問題的士袄。

我們也知道Android系統(tǒng)也是在不斷升級的悲关,有關(guān)Notification的用法也就有很多種,有的方法已經(jīng)被android拋棄了娄柳,現(xiàn)在我實(shí)現(xiàn)了三種不同的方法寓辱,并適應(yīng)不同的android版本。現(xiàn)在我就把代碼公布出來赤拒,我喜歡把解釋寫在代碼中秫筏,在這里我就不多說了诱鞠,先看效果圖:

再看代碼,主要的代碼如下:

package com.example.notification;

import android.app.Activity;

import android.app.Notification;

import android.app.NotificationManager;

import android.app.PendingIntent;

import android.content.Context;

import android.content.Intent;

import android.os.Bundle;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.RemoteViews;

public class MainActivity extends Activity implements OnClickListener{

private static final int NOTIFICATION_FLAG = 1;

private Button btn1;

private Button btn2;

private Button btn3;

private Button btn4;

private Button btn5;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

btn1=(Button) findViewById(R.id.button1);

btn2=(Button) findViewById(R.id.button2);

btn3=(Button) findViewById(R.id.button3);

btn4=(Button) findViewById(R.id.button4);

btn5=(Button) findViewById(R.id.button5);

btn1.setOnClickListener(this);

btn2.setOnClickListener(this);

btn3.setOnClickListener(this);

btn4.setOnClickListener(this);

btn5.setOnClickListener(this);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

@SuppressWarnings("deprecation")

@Override

public void onClick(View v) {

// 在Android進(jìn)行通知處理这敬,首先需要重系統(tǒng)哪里獲得通知管理器NotificationManager航夺,它是一個系統(tǒng)Service。

NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

switch (v.getId()) {

// 默認(rèn)通知

case R.id.button1:

// 創(chuàng)建一個PendingIntent崔涂,和Intent類似阳掐,不同的是由于不是馬上調(diào)用,需要在下拉狀態(tài)條出發(fā)的activity冷蚂,所以采用的是PendingIntent,即點(diǎn)擊Notification跳轉(zhuǎn)啟動到哪個Activity

PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,

new Intent(this, MainActivity.class), 0);

// 下面需兼容Android 2.x版本是的處理方式

// Notification notify1 = new Notification(R.drawable.message,

// "TickerText:" + "您有新短消息缭保,請注意查收!", System.currentTimeMillis());

Notification notify1 = new Notification();

notify1.icon = R.drawable.ic_launcher;

notify1.tickerText = "TickerText:您有新短消息蝙茶,請注意查收涮俄!";

notify1.when = System.currentTimeMillis();

notify1.setLatestEventInfo(this, "Notification Title",

"This is the notification message", pendingIntent);

notify1.number = 1;

notify1.flags |= Notification.FLAG_AUTO_CANCEL; // FLAG_AUTO_CANCEL表明當(dāng)通知被用戶點(diǎn)擊時,通知將被清除尸闸。

// 通過通知管理器來發(fā)起通知彻亲。如果id不同,則每click吮廉,在statu那里增加一個提示

manager.notify(NOTIFICATION_FLAG, notify1);

break;

// 默認(rèn)通知 API11及之后可用

case R.id.button2:

PendingIntent pendingIntent2 = PendingIntent.getActivity(this, 0,

new Intent(this, MainActivity.class), 0);

// 通過Notification.Builder來創(chuàng)建通知苞尝,注意API Level

// API11之后才支持

Notification notify2 = new Notification.Builder(this)

.setSmallIcon(R.drawable.ic_launcher) // 設(shè)置狀態(tài)欄中的小圖片,尺寸一般建議在24×24宦芦,這個圖片同樣也是在下拉狀態(tài)欄中所顯示宙址,如果在那里需要更換更大的圖片,可以使用setLargeIcon(Bitmap

.setTicker("TickerText:" + "您有新短消息调卑,請注意查收抡砂!")// 設(shè)置在status

// bar上顯示的提示文字

.setContentTitle("Notification Title")// 設(shè)置在下拉status

// bar后Activity,本例子中的NotififyMessage的TextView中顯示的標(biāo)題

.setContentText("This is the notification message")// TextView中顯示的詳細(xì)內(nèi)容

.setContentIntent(pendingIntent2) // 關(guān)聯(lián)PendingIntent

.setNumber(1) // 在TextView的右方顯示的數(shù)字恬涧,可放大圖片看注益,在最右側(cè)。這個number同時也起到一個序列號的作用溯捆,如果多個觸發(fā)多個通知(同一ID)丑搔,可以指定顯示哪一個。

.getNotification(); // 需要注意build()是在API level

// 16及之后增加的提揍,在API11中可以使用getNotificatin()來代替

notify2.flags |= Notification.FLAG_AUTO_CANCEL;

manager.notify(NOTIFICATION_FLAG, notify2);

break;

// 默認(rèn)通知 API16及之后可用

case R.id.button3:

PendingIntent pendingIntent3 = PendingIntent.getActivity(this, 0,

new Intent(this, MainActivity.class), 0);

// 通過Notification.Builder來創(chuàng)建通知啤月,注意API Level

// API 16之后才支持

Notification notify3 = new Notification.Builder(this)

.setSmallIcon(R.drawable.ic_launcher)

.setTicker("TickerText:" + "您有新短消息,請注意查收劳跃!")

.setContentTitle("Notification Title")

.setContentText("This is the notification message")

.setContentIntent(pendingIntent3).setNumber(1).build();

// 需要注意build()是在API level16及之后增加的谎仲,API11可以使用getNotificatin()來替代

notify3.flags |= Notification.FLAG_AUTO_CANCEL; // FLAG_AUTO_CANCEL表明當(dāng)通知被用戶點(diǎn)擊時,通知將被清除刨仑。

manager.notify(NOTIFICATION_FLAG, notify3);// 步驟4:通過通知管理器來發(fā)起通知郑诺。如果id不同绞呈,則每click,在status哪里增加一個提示

break;

// 自定義通知

case R.id.button4:

// Notification myNotify = new Notification(R.drawable.message,

// "自定義通知:您有新短信息了间景,請注意查收佃声!", System.currentTimeMillis());

Notification myNotify = new Notification();

myNotify.icon = R.drawable.ic_launcher;

myNotify.tickerText = "TickerText:您有新短消息,請注意查收倘要!";

myNotify.when = System.currentTimeMillis();

myNotify.flags = Notification.FLAG_NO_CLEAR;// 不能夠自動清除

RemoteViews rv = new RemoteViews(getPackageName(),

R.layout.my_notification);

rv.setTextViewText(R.id.text_content, "hello wrold!");

myNotify.contentView = rv;

Intent intent = new Intent(Intent.ACTION_MAIN);

PendingIntent contentIntent = PendingIntent.getActivity(this, 1,

intent, 1);

myNotify.contentIntent = contentIntent;

manager.notify(NOTIFICATION_FLAG, myNotify);

break;

case R.id.button5:

// 清除id為NOTIFICATION_FLAG的通知

manager.cancel(NOTIFICATION_FLAG);

// 清除所有的通知

// manager.cancelAll();

break;

default:

break;

}

}

}

再看主布局文件:

<LinearLayout xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context=".MainActivity" >

<Button android:id="@+id/btn1"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:onClick="notificationMethod"

android:text="默認(rèn)通知(已被拋棄圾亏,但是通用)" />

<Button android:id="@+id/btn2"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:onClick="notificationMethod"

android:text="默認(rèn)通知(API11之后可用)" />

<Button android:id="@+id/btn3"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:onClick="notificationMethod"

android:text="默認(rèn)通知(API16之后可用)" />

<Button android:id="@+id/btn4"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:onClick="notificationMethod"

android:text="自定義通知" />

<Button android:id="@+id/btn5"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:onClick="notificationMethod"

android:text="清除通知" />

還有一個是:自定義通知的布局文件my_notification.xml,代碼如下:

<LinearLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="#ffffff"

android:orientation="vertical" >

<TextView android:id="@+id/text_content"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textSize="20sp" />

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末封拧,一起剝皮案震驚了整個濱河市志鹃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌泽西,老刑警劉巖曹铃,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異捧杉,居然都是意外死亡陕见,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門味抖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來评甜,“玉大人,你說我怎么就攤上這事仔涩∪炭溃” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵熔脂,是天一觀的道長佩研。 經(jīng)常有香客問我,道長霞揉,這世上最難降的妖魔是什么旬薯? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮零聚,結(jié)果婚禮上袍暴,老公的妹妹穿的比我還像新娘。我一直安慰自己隶症,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布岗宣。 她就那樣靜靜地躺著蚂会,像睡著了一般。 火紅的嫁衣襯著肌膚如雪耗式。 梳的紋絲不亂的頭發(fā)上胁住,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天趁猴,我揣著相機(jī)與錄音,去河邊找鬼彪见。 笑死儡司,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的余指。 我是一名探鬼主播捕犬,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼酵镜!你這毒婦竟也來了碉碉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤淮韭,失蹤者是張志新(化名)和其女友劉穎垢粮,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體靠粪,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蜡吧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了占键。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斩跌。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖捞慌,靈堂內(nèi)的尸體忽然破棺而出耀鸦,到底是詐尸還是另有隱情,我是刑警寧澤啸澡,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布袖订,位于F島的核電站,受9級特大地震影響嗅虏,放射性物質(zhì)發(fā)生泄漏洛姑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一皮服、第九天 我趴在偏房一處隱蔽的房頂上張望楞艾。 院中可真熱鬧,春花似錦龄广、人聲如沸硫眯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽两入。三九已至,卻和暖如春敲才,著一層夾襖步出監(jiān)牢的瞬間裹纳,已是汗流浹背择葡。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剃氧,地道東北人敏储。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像朋鞍,于是被迫代替她去往敵國和親已添。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353

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