美文网首页
Android 通知栏适配

Android 通知栏适配

作者: 向右45 | 来源:发表于2018-04-26 16:12 被阅读0次

    Android 8.0以下及8.0以上通知栏创建,

    private NotificationManager mNotifyManager;
    
    private Notification.Builder builder;
    
    private NotificationChannel channel = null;
    
    int id = 1;
    

    开始创建:

        mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        //ChannelId为"1",ChannelName为"Channel1"
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
    
            System.out.println("当前为8.0以上版本");
    
            channel = new NotificationChannel("1",
                    "Channel1", NotificationManager.IMPORTANCE_DEFAULT);
            //是否在桌面icon右上角展示小红点
            channel.enableLights(true);
            //小红点颜色
            channel.setLightColor(Color.GREEN);
            //是否在久按桌面图标时显示此渠道的通知
            channel.setShowBadge(true);
            mNotifyManager.createNotificationChannel(channel);
            //与channelId对应
    
            builder = new Notification.Builder(getApplicationContext(), "1");
    
    
            builder.setSmallIcon(R.mipmap.ic_launcher)
                    .setContentTitle("内容下载")
                    .setContentText("下载中,请骚等")
                    //久按桌面图标时允许的此条通知的数量
                    .setNumber(3);
        } else {
            System.out.println("当前为8.0以下版本");
    
            builder = new Notification.Builder(this);
            builder.setContentTitle("内容下载")
                    .setContentText("下载中,请稍等")
                    .setSmallIcon(R.mipmap.ic_launcher);
        }
    

    下载开始,显示通知栏,

     System.out.println("下载开始");
     //开始时候,初始化进度条
     builder.setProgress(100, 0, false);
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
         mNotifyManager.notify(id, builder.build());
    }
    

    下载完成,更新通知栏,

       System.out.println("下载完成");
       //成功后将setProgress的两个变量设置为0,progress就会消失。setProgerss第三个参数的含义是,如果  能确定进度条执行的时间,就传入true,否则是false,此处直接传入false即可。
       builder.setProgress(0, 0, false).setContentText("已经下载完成");
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
             mNotifyManager.notify(id, builder.build());
        }
    

    下载中,更新通知栏进度条,

      //更新进度条
      int currentNum = (int) (100 * currentProgress / percent);
      System.out.println("/n下载进度百分比为:" + currentNum + "下载进度值为:" + currentProgress +     "/n下载总大小为:" + percent);
      builder.setProgress(100, currentNum, false);
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            mNotifyManager.notify(id, builder.build());
      }
    

    最后,清除通知栏。

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
         System.out.println("当前为8.0以上版本1");
         mNotifyManager.deleteNotificationChannel("1");
     }else{
          System.out.println("当前为8.0以下版本1");
          //移除通知栏
           mNotifyManager.cancel(id);
      }
    

    注:这里有点问题,就是在8.0上如果是下载文件的通知,就会出现每更新一下进度条就有一个提示音,目前的解决办法就是在创建NotificationManager时设置低优先级:

       NotificationManager.IMPORTANCE_DEFAULT
    
    image.png

    相关文章

      网友评论

          本文标题:Android 通知栏适配

          本文链接:https://www.haomeiwen.com/subject/hzcmlftx.html