Notification:
顯示在手機狀態(tài)欄的通知。Notification所代表的是一種具有全局效果的通知,程序一般通過NotificationManager服務來發(fā)送Notification。
Android3.0增加了Notification.Builder類,該類可以輕松地創(chuàng)建Notification對象。
Notification,俗稱通知,是一種具有全局效果的通知,它展示在屏幕的頂端,首先會表現(xiàn)為一個圖標的形式,當用戶向下滑動的時候,展示出通知具體的內(nèi)容。
注意:
1,因為一些Android版本的兼容性問題,對于Notification而言,Android3.0是一個分水嶺,如果不考慮向下兼容的問題,構建Notification使用Notification.Builder構建,如果考慮到向下兼容性的問題,一般推薦使用NotificationCompat.Builder構建(NotificationCompat類在v4:android.support.v4.app.NotificationCompat)。
2,在實際使用過程中,一般不會直接構建Notification對象,而是使用它的一個內(nèi)部類NotificationCompat.Builder來實例化一個對象(Android3.0之下使用Notification.Builder),并設置通知的各種屬性,最后通過NotificationCompat.Builder.build()方法得到一個Notification對象。當獲得這個對象之后,可以使用NotificationManager.notify()方法發(fā)送通知,可通過Activity.getSystemService(String)方法獲取NotificationManager對象,Activity.getSystemService(String)方法可以通過Android系統(tǒng)級服務的句柄,返回對應的對象。在這里需要返回NotificationManager,所以直接傳遞Context.NOTIFICATION_SERVICE。
——————————————————————————————————————————
(二)、Notification.Builder類中提供的方法:
builder.setAutoCancel(); 設置點擊通知后,狀態(tài)欄自動刪除通知。
builder.setSmallIcon(R.drawable.alert); 設置通知小圖標 必須設置
builder.setLargeIcon(R.drawable.alert2); 設置通知大圖標
builder.setContentTitle("標題"); 設置通知標題 必須設置
builder.setContentText("文本"); 設置通知內(nèi)容 必須設置
builder.setDefaults(Notification.DEFAULT_ALL);
設置默認的通知音樂、振動、LED等。
builder.setSound(uri); 設置通知的音樂
builder.setTicker(); 設置通知在狀態(tài)欄的提示文本。第一次提示消息的時候顯示在通知欄上。
builder.setContentIntent(); 設置點擊通知后將要啟動的程序組件對應的PendingIntent。
進階方法:
builder.setVibrate(new long[ ]); 按long數(shù)組4個參數(shù)設置手機震動頻次,請求權限
builder.setLights(int(color類顏色字段),int,int);設置LED燈閃爍顏色和間隔
builder.setStyle(new NotificationCompat對象);
new NotificationCompat的方法除了獲取Notification對象,也可可以允許我們設置通知的長文本和大圖片格式
大圖片方法:BigPictureStyle().bigPicture( Bitmap對象);
Bitmap對象需要通過圖片解碼類BitmapFactory.decodeResource(getResources(),圖片對象);獲取
長文本方法:BigTextStyle().bigText(String對象);
builder.setPriority(PRORITY_MAX/PRORITY_HIGH/PRORITY_LOW/PRORITY_MIN);設置通知優(yōu)先級
設置點擊通知后的取消方法:
1.使用builder.setAutoCancel(); 設置點擊通知后,狀態(tài)欄自動刪除通知
2.在通知啟動的活動中調(diào)用manager.cancel(id)取消,id為notify(id,Notification對象)時注冊的id
——————————————————————————————————————————
Broadcast:
廣播接收器,也被稱為全局事件,或系統(tǒng)事件。
當Android系統(tǒng)中任何程序有動作時,如果想通知其他程序,采用廣播的方式進行傳播是非常有效的。廣播從理論上說,可以將一個動作傳播給任意多個程序(當然,廣播接收器的數(shù)量會收到系統(tǒng)限制)。
系統(tǒng)完成一定的動作,就會自動發(fā)出廣播,它只負責“說”而不管你“聽不聽”,也就是不管你接收方如何處理。
廣播的類型:
1).Normal Broadcast:普通廣播
此處將普通廣播界定為:開發(fā)者自己定義的intent,以context.sendBroadcast_"AsUser"(intent, ...)形式。具體可以使用的方法有:
sendBroadcast(intent)/sendBroadcast(intent, receiverPermission)/sendBroadcastAsUser(intent, userHandler)/sendBroadcastAsUser(intent, userHandler,receiverPermission)。
普通廣播會被注冊了的相應的感興趣(intent-filter匹配)接收,且順序是無序的。如果發(fā)送廣播時有相應的權限要求,BroadCastReceiver如果想要接收此廣播,也需要有相應的權限。
2).System Broadcast: 系統(tǒng)廣播
Android系統(tǒng)中內(nèi)置了多個系統(tǒng)廣播,只要涉及到手機的基本操作,基本上都會發(fā)出相應的系統(tǒng)廣播。如:開啟啟動,網(wǎng)絡狀態(tài)改變,拍照,屏幕關閉與開啟,點亮不足等等。每個系統(tǒng)廣播都具有特定的intent-filter,其中主要包括具體的action,系統(tǒng)廣播發(fā)出后,將被相應的BroadcastReceiver接收。系統(tǒng)廣播在系統(tǒng)內(nèi)部當特定事件發(fā)生時,有系統(tǒng)自動發(fā)出。
3).Local Broadcast:本地廣播
通過getInstance()方法獲得LocalBroadcastManager類的實例并進行發(fā)送與注冊。
本地廣播無法通過靜態(tài)注冊接受。
性質(zhì):保密性,安全性,高效性。
4).Ordered broadcast:有序廣播
有序廣播的有序廣播中的“有序”是針對廣播接收者而言的,指的是發(fā)送出去的廣播被BroadcastReceiver按照先后循序接收。有序廣播的定義過程與普通廣播無異,只是其的主要發(fā)送方式變?yōu)椋簊endOrderedBroadcast(intent, receiverPermission, ...)。
對于有序廣播,其主要特點總結如下:
1>多個具當前已經(jīng)注冊且有效的BroadcastReceiver接收有序廣播時,是按照先后順序接收的,先后順序判定標準遵循為:將當前系統(tǒng)中所有有效的動態(tài)注冊和靜態(tài)注冊的BroadcastReceiver按照priority屬性值從大到小排序,對于具有相同的priority的動態(tài)廣播和靜態(tài)廣播,動態(tài)廣播會排在前面。
2>先接收的BroadcastReceiver可以對此有序廣播進行截斷,使后面的BroadcastReceiver不再接收到此廣播,也可以對廣播進行修改,使后面的BroadcastReceiver接收到廣播后解析得到錯誤的參數(shù)值。當然,一般情況下,不建議對有序廣播進行此類操作,尤其是針對系統(tǒng)中的有序廣播。
廣播的注冊:
1、靜態(tài)注冊:
靜態(tài)注冊方式是在AndroidManifest.xml的application里面定義receiver并用<intent-filter>標簽設置過濾器,接收指定action廣播。。
如果在清單配置文件中配置了廣播接收器,那么程序在安裝后會自動注冊廣播接收器。
靜態(tài)注冊方式的特點:不管該應用程序是否處于活動狀態(tài),都會進行監(jiān)聽。
新創(chuàng)建接收器class文件繼承BroadcastReceiver的類,重寫onReceiver方法,并在onReceiver方法中對廣播進行處理。
當發(fā)生了AndroidManifest.xml中對應事件,就調(diào)用當前廣播的onReceiver方法。
2、動態(tài)注冊:
方式是在同一個activity里面新創(chuàng)建內(nèi)部class繼承BroadcastReceiver的類,并調(diào)用當前上下文對象的registerReceiver() 方法來注冊,和靜態(tài)的內(nèi)容差不多。一個形參是receiver對象,另一個是IntentFilter對象。而IntentFilter構造方法的參數(shù)是要接收的action。
動態(tài)注冊方式特點:在代碼中進行注冊后,當應用程序關閉后,就不再進行監(jiān)聽。
動態(tài)注冊廣播接收器的特點,就是當用來注冊的 Activity 關掉后,廣播也就失效了。同時反映了靜態(tài)注冊的一個優(yōu)勢,就是無需擔憂廣播接收器是否被關閉,只要設備是開啟狀態(tài),廣播接收器就是打開著的。
//創(chuàng)建自己的接收器
MyReceiver receiver = new MyReceiver();
//創(chuàng)建過濾器,并指定action,使之用于接收同action的廣播
IntentFilter filter = new IntentFilter("android.intent.action.PHONE_STATE");
//或者:
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.PHONE_STATE");
filter.setPriority(999);
registerReceiver(receiver, filter);//接收器與通知事件注冊
發(fā)送及接受自定義廣播:
接收:
創(chuàng)建自己的接收器繼承BroadcastReceiver的類并動態(tài)or靜態(tài)注冊,在onReceiver方法中處理具體邏輯。
發(fā)送:
// 指定廣播目標Action
Intent intent = new Intent("MyReceiver_Action");
//此字段與接收器注冊的字段匹配一致則調(diào)用其onReceiver方法
// 可通過Intent攜帶消息
intent.putExtra("msg", "發(fā)送廣播");
// 發(fā)送廣播消息
sendBroadcast(intent);
注銷BroadcastReceiver:
1、一般在onStart中注冊BroadcastReceiver,在onStop中取消BroadcastReceiver。
2、一個BroadcastReceiver 對象只有在被調(diào)用onReceive(Context, Intent)時才有效,當從該方法返回后,該對象就無效的了,結束生命周期。
//動態(tài)注冊的廣播要記住在activity的onDestroy回調(diào)方法中注銷廣播接收器
unregisterReceiver(receiver);
——————————————————————————————————————————
【廣播系統(tǒng)大全及實例樣本】:http://blog.csdn.net/zhangzhen_v/article/details/51697330
【各種廣播詳解及版本變遷】:http://www.cnblogs.com/lwbqqyumidi/p/4168017.html