今天使用4.0.3使用android
Notification notification2 = new Notification(R.drawable.advise2,
"通知測試",
System.currentTimeMillis()); notification2.setLatestEventInfo(getActivity(), "testTitle", "testContent", null);ide
結果androidstudio報錯,setLatestEventInfo該方法找不到,通過查證官方在API Level 11中,該函數已經被替代,不推薦使用了。因此在4.0.3平臺也就是API Level 15中,使用Notification的setLatestEventInfo()函數時,顯示setLatestEventInfo()效果。建議使用Notification.Builder來建立 notification 實例函數
Notification.Builder builder1 = new Notification.Builder(MainActivity.this); builder1.setSmallIcon(R.drawable.advise2); //設置圖標 builder1.setTicker("顯示第二個通知"); builder1.setContentTitle("通知"); //設置標題 builder1.setContentText("點擊查看詳細內容"); //消息內容 builder1.setWhen(System.currentTimeMillis()); //發送時間 builder1.setDefaults(Notification.DEFAULT_ALL); //設置默認的提示音,振動方式,燈光 builder1.setAutoCancel(true);//打開程序後圖標消失 Intent intent =new Intent (MainActivity.this,Center.class); PendingIntent pendingIntent =PendingIntent.getActivity(MainActivity.this, 0, intent, 0); builder1.setContentIntent(pendingIntent); Notification notification1 = builder1.build(); notificationManager.notify(124, notification1); // 經過通知管理器發送通知
若是該通知只是起到 「通知」的做用,不但願用戶點擊後有相應的跳轉,那麼,intent,pendingIntent這幾行代碼能夠不寫測試
Notification.Builder builder = new Notification.Builder(MainActivity.this); builder.setSmallIcon(R.drawable.advise); builder.setTicker("顯示第一個通知"); builder.setContentTitle("第一個通知"); builder.setContentText("天天進步一點點"); builder.setWhen(System.currentTimeMillis()); //發送時間 builder.setDefaults(Notification.DEFAULT_ALL); Notification notification = builder.build(); notificationManager.notify(123, notification);
第一個具備點擊提示有跳轉功能,後面一個沒有跳轉功能,只是提示做用ui
如下借鑑其餘博主的總結:
低於API Level 11版本,也就是Android 2.3.3如下的系統中,setLatestEventInfo()函數是惟一的實現方法。前面的有關屬性設置這裏就再也不提了,網上資料不少。this
Intent intent = new Intent(this,MainActivity);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_ONE_SHOT);
notification.setLatestEventInfo(context, title, message, pendingIntent);
manager.notify(id, notification); spa
高 於API Level 11,低於API Level 16 (Android 4.1.2)版本的系統中,可以使用 Notification.Builder來構造函數。但要使用getNotification()來使notification實現。此時,前面版本在 notification中設置的Flags,icon等屬性都已經無效,要在builder裏面設置。事件
Notification.Builder builder = new Notification.Builder(context)
.setAutoCancel(true)
.setContentTitle("title")
.setContentText("describe")
.setContentIntent(pendingIntent)
.setSmallIcon(R.drawable.ic_launcher)
.setWhen(System.currentTimeMillis())
.setOngoing(true);
notification=builder.getNotification(); ip
高於API Level 16的版本,就能夠用Builder和build()函數來配套的方便使用notification了。get
Notification notification = new Notification.Builder(context)
.setAutoCancel(true)
.setContentTitle("title")
.setContentText("describe")
.setContentIntent(pendingIntent)
.setSmallIcon(R.drawable.ic_launcher)
.setWhen(System.currentTimeMillis())
.build();
【注意點】:
在構造notification的時候有不少種寫法,可是要注意,用
Notification notification = new Notification();
這種構建方法的時候,必定要加上notification.icon這個設置,否則,程序雖然不會報錯,可是會沒有效果。
Example:Notification的使用案例:
public class MainActivity extends Activity { private Button bt1; private NotificationManager notificationManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); setViews(); setlisteners(); } private void setlisteners() { bt1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 發送通知 Notification.Builder builder = new Notification.Builder(MainActivity.this); builder.setSmallIcon(R.mipmap.ic_launcher); builder.setTicker("this is ticker text"); // 通知的ticker內容,當通知剛建立的時候,它會在系統的狀態欄一閃而過 builder.setContentTitle("this is title"); // 通知的標題 builder.setContentText("this is content"); // 通知內容 builder.setWhen(System.currentTimeMillis()); // 通知被建立的時間,以毫秒爲單位 builder.setDefaults(Notification.DEFAULT_ALL); // 通知到來的時候,手機會發出振動、播放音樂、led燈亮的提示,具體是什麼的提示,由手機的設置決定 Intent intent = new Intent(MainActivity.this,NotificationActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this,0,intent,PendingIntent.FLAG_CANCEL_CURRENT); builder.setContentIntent(pendingIntent); // 響應通知的點擊事件 Notification notification = builder.getNotification(); notificationManager.notify(1, notification); } }); } private void setViews() { bt1 = (Button)findViewById(R.id.bt1); } }
NotificationActivity 通知的點擊事件的響應活動:
public class NotificationActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_notification); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.cancel(1); // // 取消通知 參數:爲建立通知的的通知id } }