Android基礎------通知欄


前言: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();

    }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM