• Android8.0通知


    android里面经常会使用Notification来显示通知的消息,一般使用NotificationManager来创建通知消息

     NotificationManager manger = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
            //为了版本兼容  选择V7包下的NotificationCompat进行构造
            NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
            //Ticker是状态栏显示的提示
            builder.setTicker("1");
            //第一行内容  通常作为通知栏标题
            builder.setContentTitle("推送标题");
            //第二行内容 通常是通知正文
            builder.setContentText("内容");
            //可以点击通知栏的删除按钮删除
            builder.setAutoCancel(true);
            //系统状态栏显示的小图标
            builder.setSmallIcon(R.mipmap.ic_launcher);
            Notification notification = builder.build();
            notification.sound = Uri.parse("android.resource://"
                    + context.getPackageName() + "/" + R.raw.ti);
            builder.setDefaults(NotificationCompat.DEFAULT_VIBRATE | NotificationCompat.DEFAULT_LIGHTS);
            notification.flags |= Notification.FLAG_AUTO_CANCEL;
    //        Intent clickIntent = new Intent(); //点击通知之后要发送的广播
    //        int id = (int) (System.currentTimeMillis() / 1000);
    //        clickIntent.addCategory(context.getPackageName());
    //        clickIntent.setAction(JPushInterface.ACTION_NOTIFICATION_OPENED);
    //        clickIntent.putExtra(JPushInterface.EXTRA_EXTRA, bundle.getString(JPushInterface.EXTRA_EXTRA));
    //        PendingIntent contentIntent = PendingIntent.getBroadcast(context, id, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    //        notification.contentIntent = contentIntent;
            manger.notify(1, notification);
    

      然而在Android8.0以上的版本并不能看到通知的内容,android8.0需要使用NotificationChannel来处理通知的显示,根据处理得到了以下内容。

    package com.snail.monitor.util;
    
    import android.annotation.TargetApi;
    import android.app.NotificationChannel;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.content.Context;
    import android.content.ContextWrapper;
    import android.content.Intent;
    import android.graphics.BitmapFactory;
    import android.graphics.Color;
    import android.os.Build;
    import android.support.v4.app.NotificationCompat;
    
    import com.snail.monitor.R;
    
    import cn.jpush.android.api.JPushInterface;
    
    import static android.app.Notification.VISIBILITY_SECRET;
    import static android.support.v4.app.NotificationCompat.PRIORITY_DEFAULT;
    
    /**
     * Created by zd on 2019/1/7.
     */
    
    public class NotificationUtils extends ContextWrapper {
    
        public static final String CHANNEL_ID = "default";
        private static final String CHANNEL_NAME = "Default Channel";
        private static final String CHANNEL_DESCRIPTION = "this is default channel!";
        private NotificationManager mManager;
    
        private Context context;
        private String EXTRA_EXTRA;
        public NotificationUtils(Context base,String EXTRA_EXTRA) {
            super(base);
            context = base;
            this.EXTRA_EXTRA = EXTRA_EXTRA;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                createNotificationChannel();
            }
        }
    
        @TargetApi(Build.VERSION_CODES.O)
        private void createNotificationChannel() {
            NotificationChannel channel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT);
            //是否绕过请勿打扰模式
            channel.canBypassDnd();
            //闪光灯
            channel.enableLights(true);
            //锁屏显示通知
            channel.setLockscreenVisibility(VISIBILITY_SECRET);
            //闪关灯的灯光颜色
            channel.setLightColor(Color.RED);
            //桌面launcher的消息角标
            channel.canShowBadge();
            //是否允许震动
            channel.enableVibration(true);
            //获取系统通知响铃声音的配置
            channel.getAudioAttributes();
            //获取通知取到组
            channel.getGroup();
            //设置可绕过  请勿打扰模式
            channel.setBypassDnd(true);
            //设置震动模式
            channel.setVibrationPattern(new long[]{100, 100, 200});
            //是否会有灯光
            channel.shouldShowLights();
            getManager().createNotificationChannel(channel);
        }
    
        private NotificationManager getManager() {
            if (mManager == null) {
                mManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            }
            return mManager;
        }
    
        /**
         * 发送通知
         */
        public void sendNotification(String title, String content) {
            NotificationCompat.Builder builder = getNotification(title, content);
            getManager().notify(1, builder.build());
        }
    
        private NotificationCompat.Builder getNotification(String title, String content) {
            NotificationCompat.Builder builder = null;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                builder = new NotificationCompat.Builder(getApplicationContext(), CHANNEL_ID);
            } else {
                builder = new NotificationCompat.Builder(getApplicationContext());
                builder.setPriority(PRIORITY_DEFAULT);
            }
            //标题
            builder.setContentTitle(title);
            //文本内容
            builder.setContentText(content);
            //小图标
            builder.setSmallIcon(R.mipmap.ic_launcher);
            //设置点击信息后自动清除通知
            builder.setAutoCancel(true);
            Intent clickIntent = new Intent(); //点击通知之后要发送的广播
            int id = (int) (System.currentTimeMillis() / 1000);
            clickIntent.addCategory(context.getPackageName());
            clickIntent.setAction(JPushInterface.ACTION_NOTIFICATION_OPENED);
            clickIntent.putExtra(JPushInterface.EXTRA_EXTRA, EXTRA_EXTRA);
            PendingIntent contentIntent = PendingIntent.getBroadcast(context, id, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    
            builder.setContentIntent(contentIntent);
    
            return builder;
        }
    
        /**
         * 发送通知
         */
        public void sendNotification(int notifyId, String title, String content) {
            NotificationCompat.Builder builder = getNotification(title, content);
            getManager().notify(notifyId, builder.build());
        }
    
        
    }  
  • 相关阅读:
    八爪鱼 爬取微博中的图片到本地
    【简易采集】美团数据抓取方法 八爪鱼
    jeesite 的提示消息图标
    SpringBoot 入门 Demo
    spring 简单入门实例
    正则表达式之匹配替换
    数据结构之堆栈
    c#设计模式之装饰者模式
    c#设计模式之策略模式
    一个自然数在1700和1800之间,且被5除余3,被7除余4,被11除余6,求符合条件的数
  • 原文地址:https://www.cnblogs.com/kkrs/p/10234700.html
Copyright © 2020-2023  润新知