美文网首页
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