专栏首页代码男人消息通知Notificatio在8.0上不显示,适配Android8.0

消息通知Notificatio在8.0上不显示,适配Android8.0

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/huangliniqng/article/details/83537119

public class NotificationUtil {

    private Context aContext;
    private NotificationManager notificationManager;

    private static class NotificationHolder {
        private static final NotificationUtil INSTANCE = new NotificationUtil();
    }

    private NotificationUtil() {
    }

    public static final NotificationUtil getInstance() {
        return NotificationHolder.INSTANCE;
    }

    /**
     * 初始化变量和适配8.0工作
     *
     * @param context
     */
    @RequiresApi(api = 26)
    public void init(Context context) {
        aContext = context;
        notificationManager = (NotificationManager) aContext.getSystemService(
                NOTIFICATION_SERVICE);
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) {
            String channelId = "chat";
            String channelName = "聊天消息";
            int importance = NotificationManager.IMPORTANCE_HIGH;
            createNotificationChannel(channelId, channelName, importance);
        }
    }

    /**
     * 为8.0 设置通知渠道
     *
     * @param channelId
     * @param channelName
     * @param importance
     */
    @RequiresApi(api = 26)
    private void createNotificationChannel(String channelId, String channelName, int importance) {
        NotificationChannel notificationchannel = new NotificationChannel(channelId, channelName, importance);
        notificationManager.createNotificationChannel(notificationchannel);
    }


    /**
     * 发送通知消息
     *
     * @param title
     * @param content
     */
    public void sendNotification(String title, String content, Context context, Activity activity) {


        Intent intent = new Intent(context, activity.getClass());
        PendingIntent intentPend = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

        Notification notification = new NotificationCompat.Builder(aContext, "chat")
                .setContentTitle(title)
                .setContentText(content)
                .setWhen(System.currentTimeMillis())
                .setSmallIcon(R.mipmap.ic_launcher)
                .setLargeIcon(BitmapFactory.decodeResource(aContext.getResources(), R.mipmap.ic_launcher))
                .setAutoCancel(true)
                .setContentIntent(intentPend)
                .build();
        notificationManager.notify(1, notification);
    }


    /**
     * 发送通知消息
     * bundle
     * @param bundle
     * @param context
     */
    public void sendNotificationBundle(Bundle bundle, Context context, Class activity) {

        Intent intent = new Intent(context, activity);
        intent.putExtras(bundle);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent intentPend = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
        String title = bundle.getString(JPushInterface.EXTRA_TITLE);
        String content = bundle.getString(JPushInterface.EXTRA_MESSAGE);
        Notification notification = new NotificationCompat.Builder(aContext, "chat")
                .setContentTitle(title)
                .setContentText(content)
                .setWhen(System.currentTimeMillis())
                .setSmallIcon(R.mipmap.ic_launcher)
                .setLargeIcon(BitmapFactory.decodeResource(aContext.getResources(), R.mipmap.ic_launcher))
                .setAutoCancel(true)
                .setContentIntent(intentPend)
                .build();
        notificationManager.notify(1, notification);
    }

}

使用方式:NotificationUtil.init(context).sendNotificationBundle();

或者NotificationUtil.init(context).sendNotification();

Activity参数对应的是点击后要跳转的Activity

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Kotlin语法基础

    定义常量与变量 可变变量定义:var 关键字 var <标识符> : <类型> = <初始化值> 不可变变量定义:val 关键字,只能赋值一次的变量(类似...

    黄林晴
  • Android实现 刮刮乐效果

           Android刮刮乐效果的实现,自定义view,绘制出中奖信息,将一张图片绘制在中奖信息的上层,通过onTouchEvent监听用户手势,通过pa...

    黄林晴
  • 从本地更新已有项目到github

    4.git remote rm origin(如果没有这一步直接下一步会提示错误fatal: remote origin already exists.)

    黄林晴
  • asp.net mvc 简单项目框架的搭建过程(一)对Bll层和Dal层进行充分解耦

      学习asp.net 已经有近三个月的时间了,在asp.net mvc上花的时间最多,但个人真是有些菜,不得不说,asp.net mvc的水真的还是蛮深的。目...

    CherishTheYouth
  • RPA机器人流程自动化开启高效办公潮流

    数据输入和报告生成作业是公司常见的流程,几乎不限行业。这种工作简单且重复,往往占用了企业大量的人力成本和时间成本。

    蕉黄
  • vue v-if与v-show使用注意问题

    在使用中发现v-show和v-if用哪个都不可以控制元素块的显示隐藏, 之前v-show和v-if都是这样写的: <span v-if="{loadingCom...

    蓓蕾心晴
  • 【设计模式-中介者模式】

    【导读】在信息高速发展的时代,估计很多朋友都记不住别人的号码,这个时候就需要一个“通讯录”来存储号码,这个通讯录就是中介者。

    Liusy
  • MySQL 在高并发下的 订单撮合 系统使用 共享锁 与 排他锁 保证数据一致性

    距离上次择文发表,两月余久。2018年也即将要结束了,目前的工作依然是与区块链应用相关的,也很荣幸在9月初受邀签约出版暂名为《区块链以太坊DApp实战开发》一书...

    林冠宏-指尖下的幽灵
  • 助力SpringBoot自动配置的条件注解ConditionalOnXXX分析--SpringBoot源码(三)

    上一篇分析了SpringBoot源码结构及各个模块pom之间的关系后,那么此篇开始就开始解开SpringBoot新特性之一--自动配置的神秘面纱了。因为Spri...

    源码笔记
  • 【DB笔试面试481】如何判断SCHEDULER JOB是否正在运行?

    可以查询DBA_SCHEDULER_JOBS视图的STATE列,若STATE列的值为RUNNING,则代表当前的JOB正在运行。或者通过查询视图DBA_SCHE...

    小麦苗DBA宝典

扫码关注云+社区

领取腾讯云代金券