編輯:關於Android編程
Hi,眾猿們,今天講講安卓中通知的使用:
什麼是通知:安卓系統用戶發送消息的一種方式,當通知發出後,會出現在系統的通知欄上,當用戶點擊通知時,會進入到相應的界面(想象下當有新短信到來時的情況),一個默認的通知包含的內容為:[通知包含的內容]
通知的基本使用方式:其代碼如下(一般定義在上下文對象(如Activity)中):
//獲得通知管理器,通知是一項系統服務
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
//初始化通知對象 p1:通知的圖標 p2:通知的狀態欄顯示的提示 p3:通知顯示的時間
Notification notification = new Notification(R.drawable.ic_launcher, "提醒", System.currentTimeMillis());
//點擊通知後的Intent,此例子點擊後還是在當前界面
Intent descIntent = new Intent(this, MainActivity.class);
PendingIntent intent = PendingIntent.getActivity(this, 0, descIntent, 0);
//設置通知信息
notification.setLatestEventInfo(this, "提醒", "祝您天天快樂", intent);
notification.flags|=Notification.FLAG_AUTO_CANCEL; //當查看後,自動消失
notification.defaults |= Notification.DEFAULT_SOUND;//默認聲音提示
//發送通知,
manager.notify(0, notification);
從上面這段代碼中我們可以看出通知編程中主要涉及到兩個象:Notification和NotificationManager,下面咱們來一一接介紹對象:
Notification:通知對象,我們希望展示一個什麼樣的通知,都要通過該對象來實現
1.創建一個通知對象:調用其構造方法即可,其參數列表為:
int icon :通知的圖標資源的id號
CharSequence tickerText:通知發出且用戶還未下拉通知欄時通知在通知欄上展示的信息
long when :通知的發出時間
2.setLatestEventInfo方法:設置通知攜帶的信息,其參數列表為:
Context context :創建通知的對象,可以是Activity、Service等
CharSequence contentTitle:用戶下拉通知後顯示的標題
CharSequence contentText:用戶下拉通知後顯示的內容
PendingIntent contentIntent:用戶點擊通知後要完成的動作(如啟動Activity等),該動作會延時完成,且不是通知的創建者(同時也是PendingIntent對象的創建者)來完成,因此要使用PendingIntent對象而不用Intent對象
3.sound字段:Uri類型的對象,設置通知發出時的聲音
4.vibrate字段:int類型的數組,設置通知發出時的震動策略,如當該值為:{0,100,200,300}時,即可表示: 0毫秒後開始振動,振動100毫秒後停止,再過200毫秒後再次振動300毫秒
5.設置通知發出時指示燈的閃亮情況,需使用以下字段:
ledARGB :十六進制int型值,表示指示燈的顏色,如:0xff00ff00;
ledOnMS :一個周期內指示燈亮的時間
ledOffMS:一個周期內指示燈滅的時間
我們可以看到,設置通知發出時的提示聲音、震動情況和指示燈閃爍都是通過對Notification對象中字段進行賦值來完成的,我們甚至可以通過對Notification中的字段進行賦值來設置通知的界面(自定義通知的界面將在下面講),設置點擊通知後的動作等,具體應該對哪些字段賦值,眾猿們可以自行查閱,本猿猿就不細說了,接下來再說說幾個字段:
6.flags:int型值,設置通知的其它屬性,其值可以是Notification對象中的如下靜態常量:
FLAG_AUTO_CANCEL:在通知欄上點擊此通知後自動清除此通知
FLAG_INSISTENT:重復發出聲音,直到用戶響應此通知
FLAG_ONLY_ALERT_ONCE:發起通知後,鈴聲和震動均只執行一次
FLAG_ONGOING_EVENT:將此通知放到通知欄的"Ongoing"即"正在運行"組中,他們通常是用來表示一個後台任務,用戶積極參與(如播放音樂)或以某種方式正在等待,因此占用設備(如一個文件下載,同步操作,主動網絡連接)
FLAG_NO_CLEAR:表明在點擊了通知欄中的"清除通知"後,此通知不清除,經常與FLAG_ONGOING_EVENT一起使用
FLAG_SHOW_LIGHTS:設置通知發出時會使用指示燈,我們要設置通知發出時指示燈的閃亮情況時必須對flags設置該值,
當我們需要對flags設置多個值時,每個值之間要用|隔開
7.defaults:設置通知的那些屬性將采用默認值,這時我們對這些屬性的其它設置將失效,其值可以是Notification對象中的如下靜態常量:
DEFAULT_SOUND:設置通知使用默認的提示音
DEFAULT_VIBRATE:設置通知使用默認的震動方式
DEFAULT_LIGHTS:設置通知使用默認的指示燈效果
DEFAULT_ALL:設置通知全部使用默認效果
此外,Notification對象中還有一個property字段,用於設置通知的優先級,沒什麼鳥用,大家了解就行
NotificationManager:通知的管理對象,負責發送通知
1.獲取NotificationManager對象:調用Context對象的getSerivce方法,需傳入Context對象的靜態常量:NOTIFICATION_SERVICE作為參數
2.notify方法:發送一個通知,其參數為:
int id:為被發送的通知指定一個id
Notification notification:需要被發送的通知對象
其實呢,android系統還為我們提供另外一種創建Notification對象的方法,即:使用NotificationCompat中的Builder對象,知道觀察者設計模式的猿猿們一看這個肯定就懂,本猿猿就不多說了,
自定義通知的布局:通知被發送時,其在通知欄上都會有一個默認的布局,但有時這個默認的布局並不能滿足我們的要求,這是我們就要為通知自定義布局了:
了解RemoteViews對象:該對象代表一個其它進程中的視圖對象,我們都知道View是當前線程中的視圖對象,而當我們需要為其它進程(如:通知是運行在系統進程中的,並不在當前進程中,因此其布局視圖也不屬於當前進程,再如桌面上的懸浮窗,其布局視圖也不屬於當前進程)中的對象創建視圖時,就用用到RemoteViews對象,說到這兒大家就都能明白通知的布局視圖是一個RemoteViews吧,因為我們要先了解一下該對象:
1.將布局文件映射為RemoteViews對象:調用RemoteViews對象的構造函數即可,即參數列表為:
String packageName:當前進程的包名,調用Context對象的getPackageName()方法即可獲得
int layoutId : 需映射的布局文件的資源id號
2.RemoteViews對象屬於其它進程,因此其僅支持FrameLayout、LinearLayout、RelativeLayout三種布局控件和AnalogClock、Chronometer、Button、ImageButton、ImageView、ProgressBar、TextView、ViewFlipper、ListView、GridView、StackView和AdapterViewFlipper這些顯示控件,其布局文件中也不能出現其它控件
3.為RemoteViews對象的布局文件中的控件設置文字、背景圖片等屬性:可以直接在布局文件中為控件指定屬性,當需要我們在代碼中設置時要調用RemoteViews中的如下方法:
setImageViewResource :為布局文件中的ImageView控件設置圖片資源
setTextViewText:為布局文件中的TextView控件設置文字
RemoteViews對象中還有很多類似的方法,它們都用來為布局文件中的控件設置屬性的,且它們的參數基本上相同,第一個參數是控件的id,第二個是該屬性的值
4.為RemoteViews對象的布局文件中的控件設置點擊事件:從上面來看我們不能通過RemoteViews對象找到某一個控件,因此如果要為控件設置點擊事件的話我們需要借助RemoteViews對像的方法:setOnClickPendingIntent(即需要借助PendingIntent對象來實現我們點擊控件後需要完成的動作),其參數列表為:
int viewId:需要設置點擊事件的控件的id
PendingIntent pendingIntent:該對象封裝了我們點擊控件後需要完成的動作,一般我們會創建一個用於啟動廣播接收者的PendingIntent對象,在廣播接收者中處理我們的點擊事件(也就是說我們還要再自定義一個廣播接收者用於處理點擊事件,所需的數據通過PendingIntent攜帶)
接下來再讓我們回到服務:有時我們需要知道服務的工作情況(如開啟服務完成下載工作,需要將下載進度通知給用戶),這是我們就可以為服務設置一個長駐通知欄的通知,用於顯示工作情況,要達到該效果,只要我們在服務中創建一個常駐通知欄的Notification並調用服務的startForeground方法即可,其參數列表為:
int id:通知的id
Notification notification:需被顯示的通知
樂2系統手機已經在樂視商城開賣,想要購置新機的網友們是不是很想知道樂2的兩款千元旗艦樂視2和樂視2Pro相差在哪裡?樂視2和樂視2Pro有什麼區別嗎?到底樂
前言:上篇介紹了自定義控件的基本要求以及繪制的基本原理,本篇文章主要介紹如何給自定義控件自定義一些屬性。本篇文章將繼續以上篇文章自定義圓形百分比為例進行講解。有關原理知識
因為Android軟件開發分工目前還沒有細化,程序員往往需要負責軟件界面的開發,雖然軟件的界面圖片已經由美工設計好了,但是如果使用layout技術把軟件做成漂亮的界面確實
ListView已經用了很多年了,後來又有了RecyclerView,基本可以代替ListView/GridView了,還有瀑布流的模式,加上各種特效,於是就嘗試用Rec