前言:Android通知欄提示筆記
通知幾乎是每一款app都擁有的功能
1.發送通知
發送一個通知欄必須用到兩個類: NotificationManager 、 Notification。
NotificationManager : 是狀態欄通知的管理類,負責發通知、清楚通知等。
NotificationManager 是一個系統Service,必須通過 getSystemService()方法來獲取。
視圖文件, xml:
<Button android:text="發送通知" android:onClick="test_2" android:layout_width="match_parent" android:layout_height="wrap_content" />
<Button android:text="下載通知" android:onClick="test_3" android:layout_width="match_parent" android:layout_height="wrap_content" />
方法:
//===========================發通知==============================// //定義一個NotifactionManager對象 private NotificationManager manager; //設置日期格式 private SimpleDateFormat sdf=new SimpleDateFormat("HH:mm:ss"); public void test_2(View view){ //獲取NotifactionManager對象 manager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE); //構建一個Notifaction的Builder對象 Notification.Builder builder=new Notification.Builder(this); //設置通知相關信息 builder.setTicker("你有一條新的通知");//設置信息提示 builder.setSmallIcon(R.mipmap.ic_launcher);//設置通知提示圖標 builder.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.user2));//設置圖標 builder.setContentTitle("部門通知");//設置標題 builder.setContentText("今天中午一點在報告廳一開部門會議,"+sdf.format(new Date()));//設置文本 builder.setAutoCancel(true);//查看后自動取消 builder.setWhen(SystemClock.currentThreadTimeMillis());//什么時候發出的通知 builder.setDefaults(Notification.DEFAULT_LIGHTS);//消息提示模式 //設置震動規律,(第一個參數: 振動前等待的時間,第二個參數: 第一次振動的時長、以此類推 ) builder.setVibrate(new long[]{1000,2000,1000,3000}); //builder.setSound(); //設置聲音 //自定義聲音 //builder.setSound(Uri.parse("file:///sdcard/notification/ringer.mp3")); //設置燈 builder.setLights(Color.GREEN,1000,1000); //設置點擊通知后執行的動作 Intent intent=new Intent(this,NewFileActivity.class); intent.putExtra("message","今天中午一點在報告廳一開部門會議,請大家准參加,通知發布時間:"+sdf.format(new Date())); //用當前時間充當通知的id,這里是為了區分不同的通知,如果是同一個id,前者就會被后者覆蓋 int requestId=(int) new Date().getTime(); //第一個參數連接上下文的context // 第二個參數是對PendingIntent的描述,請求值不同Intent就不同 // 第三個參數是一個Intent對象,包含跳轉目標 // 第四個參數有4種狀態 PendingIntent pendingIntent=PendingIntent.getActivity(this,requestId,intent,PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(pendingIntent); //發出通知,參數是(通知欄的id,設置內容的對象) manager.notify(requestId,builder.build()); }
圖解:
對 NotificationManager 、 Notification更詳細的內容
2.下載通知
demo:
//發送一個下載通知 Notification.Builder builder; public void test_3(View view){ manager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE); builder=new Notification.Builder(this); builder.setTicker("文件開始下載"); builder.setSmallIcon(R.mipmap.ic_launcher); builder.setContentTitle("文件下載"); builder.setContentText("文件正在下載中......"); builder.setWhen(SystemClock.currentThreadTimeMillis()); builder.setDefaults(Notification.DEFAULT_LIGHTS);//消息提示模式 builder.setProgress(100,0,false); //模擬正在執行下載 new Thread(new Runnable() { @Override public void run() { for (int i=1;i<=100;i++){ builder.setProgress(100, i, false); if(i==100) builder.setContentText("文件下載完畢!"); manager.notify(1, builder.build()); SystemClock.sleep(100);//模擬下載 } manager.cancel(1); } }).start(); }