通知(Notification)是在下拉狀態欄顯示的信息,就像~~推送,簡單介紹下notification
首先,它需要一個管理者,就是NotificationManager,可以用如下方式獲取:
NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
然後,我們來獲取Notification對象,有一個三個參數的Notification構造函數(貌似已經被拋棄,但是還可用,改成類似對話框的那種用Builder,具體以後研究下再更新),例如
Notification notification = new Notification(R.drawable.ic_launcher,"oh my god",System.currentTimeMillis());
第一個參數(int):icon,就是通知顯示的圖標id
第二個參數(CharSequence):給個字符串,當有通知時狀態欄會顯示的內容
第三個參數(long):通知創建的時間,單位毫秒
完成之後我們對通知的內容進行設置
notification.setLatestEventInfo(context,title,content,pendingIntent);
context就是上下文了,title則是通知的標題,content是內容(注意這是狀態欄下拉後顯示的,和構造函數的第二個參數顯示的位置是不同的),至於pendingIntent在這裏不多解釋,不瞭解的可以百度下,它的參數中有個flag我查了下大神的解釋,大概是這樣的:
FLAG_CANCEL_CURRENT:如果當前系統中已經存在一個相同的PendingIntent對象,那麼就將先將已有的PendingIntent取消,然後重新生成一個PendingIntent對象。
FLAG_NO_CREATE:如果當前系統中不存在相同的PendingIntent對象,系統將不會創建該PendingIntent對象而是直接返回null。
LAG_ONE_SHOT:該PendingIntent只作用一次。在該PendingIntent對象通過send()方法觸發過後,PendingIntent將自動調用cancel()進行銷燬,那麼如果你再調用send()
方法的話,系統將會返回一個SendIntentException。
FLAG_UPDATE_CURRENT:如果系統中有一個和你描述的PendingIntent對等的PendingInent,那麼系統將使用該PendingIntent對象,但是會使用新的Intent來更新之前
PendingIntent中的Intent對象數據,例如更新Intent中的Extras。
給上代碼
Intent intent = new Intent(this,SecondActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_CANCEL_CURRENT);
notification.setLatestEventInfo(context,“my title“,“my content“,pendingIntent);
這樣就實現了點擊通知後會跳到SecondActivity
最後調用notify就可以了
notificationManager.notify(3,notification);
3是這個通知的id,當我們要用cancel方法幹掉這個通知的時候需要作爲參數傳進去,像notificationManager.cancel(3);
這樣一個簡單的通知就實現了,還有一些我們可能會經常用到的,像通知的聲音,震動,LED燈閃爍等等,也簡單說一說
我們在得到notification對象之後可以按自己的意願設置很多東西,如果都不想管可以設置爲默認,即
notification.defaults = Notification.FLAG_DEFAULT_ALL;
設置振動需要一個long數組,其中奇數位是不震動時長(ms),偶數位是震動時長,當狀態欄被下拉會終止振動
long[] mVibrate = {0,1000,2000,3000};
像上面這句,0代表停0s,即發出通知會馬上振動,1000則爲振動1s,2000爲停止振動2s,3000爲振動3s...以此類推
notification.vibrate = mVibrate;
設置好之後需要加上權限<uses-permission android:name="android.permission.VIBRATE"/>
設置聲音需要uri,可以這樣
Uri uri = Uri.fromFile("聲音文件路徑");或者Uri.parse("路徑"):
notification.sound = uri;
還有LED,這個東西在我手機上試了好像並沒什麼效果,所以...
notification.ledARGB = Color.RED;
notification.ledOnMs = 1000;
notification.ledOffMs = 2000;
notification.flags = Notification.FLAG_SHOW_LIGHTS;
上面代碼是讓紅色led燈亮1s然後暗2s這樣閃
目前就學習了這麼多,等學習到新知識會及時跟大家分享的,寫的不太細,感謝大家看完