編輯:關於Android編程
通知機制 是Android和用戶交互,提高APP活躍度的重要手段,可以將一些重要的信息通過通知展示給用戶,比如說新的聊天消息或者日歷事件。Notification的設計理念是既將重要的信息告知用戶又不會打斷用戶當前的行為,如果信息使用戶關注的,用戶會點擊主動去執行相關的操作,對於一個APP來說,通知也不可以濫用,否則冗余的消息通知只會疏遠你的用戶。
通知可以分為ToastNotification和StatusBarNotification,Toast相對簡單,我們主要研究的的是StatusBarNotification
1.顯示接收到短信、即時消息等信息 (如QQ、微信、短信)
2.顯示客戶端的推送消息(如有新版本發布,廣告,推薦新聞等)
3.顯示正在進行的事物(後台運行的程序,如音樂播放器、版本更新時候的下載進度等)
一個通知到來之後,一般會閃爍一個5s的ticker,然後狀態欄顯示通知圖標,下拉狀態欄顯示消息通知的完整信息,如下圖,發送通知的同時也可以給notification添加聲音、震動、閃光燈等功能用來提醒用戶。
當用戶點擊這個notification 時,系統就會根據創建 notification 時傳入的Intent來啟動對應的Activity。當後台服務需要提示用戶來響應某個事件時,也應該使用狀態欄通知。後台服務不應該自己去啟動一個 activity 來與用戶互動,它應該創建一個狀態欄通知,當用戶選擇這個通知時再去啟動 activity.
可以在 Activity或者 Service中初始化一個狀態欄通知,但是由於 activity 只能在它運行在前台並獲取焦點時采取操作,一般我們只是用做測試,所以狀態欄通知通常都是由服務創建的。
使用 Notification類和 NotificationManager類來創建一個狀態欄通知
NotificationManager類是用來管理所有通知的系統服務,通getSystemService()方法來獲得它的引用。使用Notification實例去配置一個狀態欄通知的屬性,比如圖標、內容、其他的設置)等。然後,通過notify()方法將你的Notification發送出去.
Android3.0之前,直接創建一個Notification
1.獲取 NotificationManager的引用
NotificationManager mNotificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
2.創建 Notification
Notification notification =new Notification(icon,tickerText,when);
3. 定義通知的內容和PendingIntent:
//實例化Intent
Intent notificationIntent = new Intent(this, MyClass.class);
//獲取PendingIntent
PendingIntent contentIntent =PendingIntent.getActivity(this, 0,notificationIntent, 0);
//設置事件信息
notification.setLatestEventInfo(context,contentTitle, contentText, contentIntent);
4. 把 Notification傳給NotificationManager:
mNotificationManager.notify(id, notification);
3.0之後,為了更好地管理通知,androidSDK引入了Notification的內部類Notification.Builder,一般用於管理Notification,動態的設置Notification的一些屬性,使用set來設置相關屬性,set方法有返回值,返回配置後的builder對象。
NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
Builderbuilder = new NotificationCompat.Builder(MainActivity.this);
PendingIntentcontentIndent =PendingIntent.getActivity(MainActivity.this, 0,new Intent(MainActivity.this,MainActivity.class),PendingIntent.FLAG_UPDATE_CURRENT);
builder .setContentIntent(contentIndent)
.setSmallIcon(R.drawable.ic_launcher)//設置狀態欄顯示的小圖標
.setLargeIcon(BitmapFactory.decodeResource(res,R.drawable.i5))//下拉下拉列表裡面的圖標(大圖標)
.setTicker("this is bitch!") //設置狀態欄的顯示的信息
.setWhen(System.currentTimeMillis())//設置時間發生時間
.setAutoCancel(true)//設置可以清除
.setContentTitle("This is ContentTitle")//設置下拉列表裡的標題
.setContentText("this is ContentText");//設置上下文內容
//獲取添加了各種屬性的新的notification對象
Notificationnotification = builder.build();
//加id是為了顯示多條Notification
notificationManager.notify(id,notification);
★發送通知方法的第一個參數是通知的 ID,第二個參數是要發送的 Notification實例。ID是你程序中通知的身份識別,更新一條通知的時候也是通過這個ID,就不會產生過多的通知了,只要ID相同,就可以更新這條通知。
★PendingIntent和Intent略有不同,它可以設置執行次數,主要用於遠程服務通信、鬧鈴、通知、啟動器、短信中。Notification支持多種Intent來響應單擊事件、消除事件、處理緊急狀態的全屏事件等,用到了setContentIntent(PendingIntentintent)來處理以上事件。
可以給通知設置一個默認的聲音或者在程序中指定一個聲音.
默認聲音:notification.defaults |=Notification.DEFAULT_SOUND;
自定義通知聲音:
//獲取默認鈴聲
.setDefaults(Notification.DEFAULT_SOUND)
//獲取自定義鈴聲
.setSound(Uri.parse("file:///sdcard/xx/xx.mp3"))
//獲取Android多媒體庫內的鈴聲
.setSound(Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI,"5"))
★如果 defaults 屬性中有 DEFAULT_SOUND,那麼默認的聲音將會覆蓋自定義設置的聲音。
可以通過默認的震動提示用戶,或者在應用中自定義一種震動形式.
使用默認震動:
notification.defaults |= Notification.DEFAULT_VIBRATE;
要實現自定義的震動,將一個 long 型數組傳給 vibrate 屬性:
long[] vibrate ={0,100,200,300};//延時0ms,震動100ms,延時200ms,震動300ms
builder.setVibrate(vibrate);
★如果 defaults 屬性中包含了 DEFAULT_VIBRATE值,那麼默認的震動形式將會覆蓋自定義的震動
可以使用默認的閃光燈,也可以在程序中自定義閃光燈的顏色和形式.
使用默認的閃光燈:
notification.defaults |= Notification.DEFAULT_LIGHTS;
自定義閃光燈:
需要設置如下屬性ledARGB表示顏色,ledOffMS表示燈滅的時間,ledOnMS表示燈亮的時間
Builder.setLights(int argb,int onMs, int offMs)
★只有在設置了標志符Flags為Notification.FLAG_SHOW_LIGHTS的時候,才支持三色燈提醒。
★顏色跟設備有關,不是所有的顏色都可以,要看具體設備。
Notification常用的其它標識flag和屬性字段和方法
●FLAG_AUTO_CANCEL :用戶點擊通知後,通知就會自動取消掉.
●FLAG_INSISTENT:通知音頻將會不斷重復播放,直到用戶對這個通知作出響應.
●FLAG_ONLY_ALERT_ONCE:發起Notification後,鈴聲和震動均只執行一次
●FLAG_ONGOING_EVENT:歸類到“正在運行”下
●FLAG_NO_CLEAR:清除通知是不會清除該通知
●FLAG_FOREGROUND_SERVICE:表示正在運行的服務
使用方法:在實例化通知欄後天使用flags添加對應的屬性值,多個屬性之間用或表示
Notification notification = mBuilder.build();
notification.flags= Notification.FLAG_AUTO_CANCEL;
●number記錄多條通知的個數
向通知添加聲音、閃燈和振動效果的最簡單、使用默認(defaults)屬性,可以組合多個屬性對應屬性:
Notification.DEFAULT_VIBRATE //添加默認震動提醒
Notification.DEFAULT_SOUND //添加默認聲音提醒
Notification.DEFAULT_LIGHTS//添加默認三色燈提醒
Notification.DEFAULT_ALL//添加默認以上3種全部提醒
功能:設置優先級
對應優先級描述如下圖:
優先級
用戶
MAX
重要而緊急的通知,通知用戶這個事件是時間上緊迫的或者需要立即處理的。
HIGH
高優先級用於重要的通信內容,例如短消息或者聊天,這些都是對用戶來說比較有興趣的。
DEFAULT
默認優先級用於沒有特殊優先級分類的通知。
LOW
低優先級可以通知用戶但又不是很緊急的事件。
MIN
用於後台消息 (例如天氣或者位置信息)。最低優先級通知將只在狀態欄顯示圖標,只有用戶下拉通知抽屜才能看到內容。
功能:設置為ture,表示它為一個正在進行的通知。他們通常是用來表示一個後台任務,不可刪除
當有需求在通知中顯示非默認的內容的時候,可以使用 RemoteViews來自定義通知的顯示內容
Notification的自定義布局是RemoteViews,和其他RemoteViews一樣,在自定義視圖布局文件中,僅支持FrameLayout、LinearLayout、RelativeLayout三種布局控件和AnalogClock、Chronometer、Button、ImageButton、ImageView、ProgressBar、TextView、ViewFlipper、ListView、GridView、StackView和AdapterViewFlipper這些顯示控件,不支持這些類的子類或Android提供的其他控件,否則會引起ClassNotFoundException異常
步驟如下:
1)創建自定義視圖
2)獲取遠程視圖對象
RemoteViews contentView = newRemoteViews(getPackageName(),R.layout.custom_notification_layout);
contentView.setImageViewResource(R.id.image,R.drawable.notification_image);
contentView.setTextViewText(R.id.title,"Customnotification");
contentView.setTextViewText(R.id.text,"This is acustom layout");
//將 RemoveViews 對象傳給通知的 contentView 屬性
mBuilder.setContent(mRemoteViews)
3)設置PendingIntent(來響應各種事件)
mRemoteViews.setOnClickPendingIntent(R.id.btn_custom_prev,intent_prev);
4)發起Notification
mNotificationManager.notify(notifyId, notify);
繼插件化後,熱補丁技術在2015年開始爆發,目前已經是非常熱門的Android開發技術。其中比較著名的有淘寶的Dexposed、支付寶的AndFix以及QZone的超級熱
本文實例講述了Android之復選框對話框用法。分享給大家供大家參考。具體如下:main.xml布局文件<?xml version=1.0 encoding
很開心的是經歷過兩個多月的努力,項目在11月份即將要交付使用,基礎功能已經完成,剩下的是系統設定界面沒有開發完畢,如下圖:很顯然要實現的功能是幾個界面要顯示很多數據,要依
先來點閒言碎語,前段時間我有一段感悟:Android開發,本身並不是一個可以走得多遠的方向,它只是一個平台,提供了許多封裝好的API,讓大家能夠快速開發出針對特定業務的應