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();

    }

原文地址:https://www.cnblogs.com/jyiqing/p/7989197.html