} 點擊按鈕時候,狀態列會顯示:
vcHLsMmjrNe0zKzAuLbgs/bAtNK7uPZleGNlbM28seqjrLWxztKwtNehzbyx6rK7t8WjrM35z8LNz7avtcTKsbryo6yz9sC0wcvV4rj20rPD5jwvcD4KPHA+CjxpbWcgc3JjPQ=="http://www.2cto.com/uploadfile/Collfiles/20140517/20140517091102107.gif" alt="\">
然後,當我們點擊這個對話方塊之後,就會觸發intent,跳轉到Notification2Activity.java這個activity。
----------------------------------------------------------------------------------------
注意,NotificationManager裡的notify(id,notification)中的id是用來唯一標識我們當前的這個notification的標識符,我們通過cancel方法刪除通知時,傳遞的就是這個值。可能讀者在看很多文檔的時候,發現這個地方指定了一個莫名奇妙的值,例如R.drawable.icon,很多朋友就納悶了,為什麼這裡要指定一個圖片呢。這裡筆者就介紹下,為什麼呢?
答案其實很簡單,我們都知道,我們這裡對參數的唯一要求就是,這個id要和notify方法中的一致,並且是唯一;只要滿足了這兩項,其他的都無所謂。notify和cancel裡一致我們作為開發人員,太好控制了,但是唯一呢,我們還真不好說,於是這裡就有些人動小腦筋了,很巧妙的用了我們系統中的圖片資源或者其他資源的索引ID,我們都知道,這些值肯定都是唯一的!
------------------------------------------------------------------------------------------
下面是從網上找的一些資料:
如果要添加一個Notification,可以按照以下幾個步驟
1:擷取NotificationManager:
NotificationManager m_NotificationManager=(NotificationManager)this.getSystemService(NOTIFICATION_SERVICE);
2:定義一個Notification:
Notification m_Notification=new Notification();
3:設定Notification的各種屬性:
//設定通知在狀態列顯示的表徵圖
m_Notification.icon=R.drawable.icon;
//當我們點擊通知時顯示的內容
m_Notification.tickerText="Button1 通知內容.....";
通知時發出的預設聲音
m_Notification.defaults=Notification.DEFAULT_SOUND;
//設定通知顯示的參數
Intent m_Intent=new Intent(NotificationDemo.this,DesActivity.class);
PendingIntent m_PendingIntent=PendingIntent.getActivity(NotificationDemo.this, 0, m_Intent, 0);
m_Notification.setLatestEventInfo(NotificationDemo.this, "Button1", "Button1通知",m_PendingIntent );
//這個可以理解為開始執行這個通知
m_NotificationManager.notify(0,m_Notification);
4:既然可以增加同樣我們也可以刪除。當然是只是刪除你自己增加的。
m_NotificationManager.cancel(0);
這裡的0是一個ID號碼,和notify第一個參數0一樣。
這也就完成了,添加刪除工作。
------------------------------------------------------------------------------------------------------
NoticificationManager很容易可以放在狀態列,也很容易實現從statusbar進入程式 中,
NoticificationManager中通過intent執行此程式的activity就可以了
NoticificationManager狀態列操作
NotificationManager(通知管理器):
NotificationManager負責通知使用者事件的發生.
NotificationManager有三個公用方法:
1. cancel(int id) 取消以前顯示的一個通知.假如是一個短暫的通知,試圖將隱藏,假如是一個持久的通知,將從狀態條中移走.
2. cancelAll() 取消以前顯示的所有通知.
3. notify(int id, Notification notification) 把通知持久的發送到狀態條上.
//初始化NotificationManager:
NotificationManager nm =
(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
Notification代表著一個通知.
Notification的屬性:
audioStreamType 當聲音響起時,所用的音頻流的類型
contentIntent 當通知條目被點擊,就執行這個被設定的Intent.
contentView 當通知被顯示在狀態條上的時候,同時這個被設定的視圖被顯示.
defaults 指定哪個值要被設定成預設的.
deleteIntent 當使用者點擊"Clear All Notifications"按鈕區刪除所有的通知的時候,這個被設定的Intent被執行.
icon 狀態條所用的圖片.
iconLevel 假如狀態條的圖片有幾個層級,就設定這裡.
ledARGB LED燈的顏色.
ledOffMS LED關閉時的閃光時間(以毫秒計算)
ledOnMS LED開始時的閃光時間(以毫秒計算)
number 這個通知代表事件的號碼
sound 通知的聲音
tickerText 通知被顯示在狀態條時,所顯示的資訊
vibrate 震動模式.
when 通知的時間戳記.
將Notification發送到狀態條上:
Notification notification = new Notification();
Notification的設定過程……..
nm.notify(0, notification); //發送到狀態條上
------------------------------------------------------------------------------------------------------------
Notification提供了豐富的手機提示方式:
a)在狀態列(Status Bar)顯示的通知文本提示,如:
notification.tickerText = "hello";
b)發出提示音,如:
notification.defaults = Notification.DEFAULT_SOUND;
notification.sound = Uri.parse("file:///sdcard/notification/ringer.mp3");
notification.sound = Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "6");
c)手機震動,如:
notification.defaults = Notification.DEFAULT_VIBRATE;
long[] vibrate = {0,100,200,300};
notification.vibrate = vibrate;
d)LED燈閃爍,如:
notification.defaults = Notification.DEFAULT_LIGHTS;
notification.ledARGB = 0xff00ff00;
notification.ledOnMS = 300;
notification.ledOffMS = 1000;
notification.flags = Notification.FLAG_SHOW_LIGHTS;
4)發送通知:
private static final int ID_NOTIFICATION = 1;
mNotificationManager.notify(ID_NOTIFICATION, notification);
應用執行個體3 ---- 結合Broadcast 和Broadcast Receiver
private static final String ACTION_1="com.example.androidbasicdemo1.NEW_BROADCAST_1";private static final String ACTION_2="com.example.androidbasicdemo1.NEW_BROADCAST_2";
@Overridepublic boolean onCreateOptionsMenu(Menu menu) {menu.add(0,Menu.FIRST,0,"顯示Notification");menu.add(0,Menu.FIRST+1,0,"清楚Notification");return super.onCreateOptionsMenu(menu);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {int id = item.getItemId();if (id == Menu.FIRST) {actionClickMenuItem1();return true;}if (id == Menu.FIRST+1) {actionClickMenuItem2();return true;}return super.onOptionsItemSelected(item);}private void actionClickMenuItem1() {Intent intent1 = new Intent(ACTION_1);sendBroadcast(intent1);}private void actionClickMenuItem2() {Intent intent2 = new Intent(ACTION_2);sendBroadcast(intent2);}
Broadcast Receiver1
package com.example.broadcastreceiver;import com.example.androidbasicdemo1.DBDemoActivity;import android.R;import android.app.Notification;import android.app.NotificationManager;import android.app.PendingIntent;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;/** * 必須在AndroidManifest.xml中進行註冊 * 自訂Broadcast Receiver繼承BroadcastReceiver * 重寫onReceive()方法 * * @author JayHe * */public class MyAndroidReceiver1 extends BroadcastReceiver {private Context context;public static int NOTIFICATION_ID=21321;@Overridepublic void onReceive(Context context, Intent intent) {this.context = context;showNotification();}private void showNotification() {NotificationManager notificationManager = (NotificationManager) context.getSystemService(android.content.Context.NOTIFICATION_SERVICE);Notification notification = new Notification(R.drawable.ic_btn_speak_now, "來自MyReceiver1中", System.currentTimeMillis());PendingIntent contentIntent = PendingIntent.getActivity(context, 0, new Intent(context,DBDemoActivity.class), 0);notification.setLatestEventInfo(context, "在MyReceiver1中", null, contentIntent);notificationManager.notify(NOTIFICATION_ID, notification);}}
Broadcast Receiver2package com.example.broadcastreceiver;import android.app.NotificationManager;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;public class MyAndroidReceiver2 extends BroadcastReceiver {Context context;@Overridepublic void onReceive(Context context, Intent intent) {this.context = context;deleteNotification();}//deleteNotification方法將剛產生的Notification從狀態列刪除。/** * 注意:每一個Notification都有一個唯一的id記性標識,而在程式中的這個Notification的id為MyAndroidReceiver1.NOTIFICATION_ID */private void deleteNotification() {NotificationManager notificationManager = (NotificationManager) context.getSystemService(android.content.Context.NOTIFICATION_SERVICE);notificationManager.cancel(MyAndroidReceiver1.NOTIFICATION_ID);}}