美文网首页
常驻通知栏的设计与实现

常驻通知栏的设计与实现

作者: 放羊娃华振 | 来源:发表于2022-10-07 10:12 被阅读0次

通知栏的创建

在Android设备上如果要实现通知栏功能,需要区分系统版本,因为大于等于Android 8.0系统的和之前版本使用的方式不一致,故需要加版本区分代码:

//构建通知栏
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {  //8.0
            createApi26();
        } else {
            createNormal();
        }
  • 创建正常的通知栏
    /**
     * 创建8.0以下的ui
     */
    @SuppressWarnings("all")
    private void createNormal() {
        if (mBuilder == null) {
            mBuilder = new NotificationCompat.Builder(mContext);
        }
        if (notification != null) {
            notification = null;
        }
        mBuilder
//                .setContent(mNormalRemoteViews)
                .setCustomContentView(mSmallNormalRemoteViews)
                .setCustomBigContentView(mNormalRemoteViews)
                .setSmallIcon(R.drawable.ic_launcher)
                .setPriority(Notification.PRIORITY_HIGH)
                .setAutoCancel(true)
                .setDefaults(NotificationCompat.FLAG_ONLY_ALERT_ONCE);
        notification = mBuilder.build();
        notification.flags |= Notification.FLAG_ONGOING_EVENT;
    }

  • Android 8.0版本及以后的创建方式:
 /**
     * 8.0以上创建通知栏
     */
    @RequiresApi(api = Build.VERSION_CODES.O)
    private void createApi26() {
        if (manager == null) return;
        if (mChannel == null) {
            mChannel = new NotificationChannel(mChannelId, mChannelName,
                    NotificationManager.IMPORTANCE_HIGH);
        }
        manager.createNotificationChannel(mChannel);
        if (notification != null) {
            notification = null;
        }
        notification = new NotificationCompat.Builder(mContext, mChannelId)
//                .setContent(mNormalRemoteViews)
                .setCustomContentView(mSmallNormalRemoteViews)
                .setCustomBigContentView(mNormalRemoteViews)
                .setShowWhen(true)
                .setSmallIcon(R.drawable.ic_launcher)
                .setAutoCancel(true)
                .setPriority(Notification.PRIORITY_HIGH)
                .build();
        notification.flags |= Notification.FLAG_ONGOING_EVENT;

    }
  • 展示和取消通知栏的方式
//展示通知栏
manager.notify(notifycatonid, notification);
//取消通知栏
manager.cancel(notifycatonid);
  • 开启一个service并且调用startForeground方法,可以提升app的存活率
startForeground(NOTICE_ID, notification);

意外看到别人的文章也就收集着吧:
http://hoyoshaw.github.io/2015/12/15/%E9%80%9A%E7%9F%A5%E7%AE%A1%E7%90%86%E5%8A%9F%E8%83%BD%E4%B8%8E%E5%B8%B8%E9%A9%BB%E9%80%9A%E7%9F%A5%E6%A0%8F%E7%9A%84%E8%AE%BE%E8%AE%A1%E4%B8%8E%E5%AE%9E%E7%8E%B0/

相关文章

  • 常驻通知栏的设计与实现

    通知栏的创建 在Android设备上如果要实现通知栏功能,需要区分系统版本,因为大于等于Android 8.0系统...

  • RemoteView

    常驻通知栏 Notification RemoteView 自定义通知栏中,需要自定义通知栏的视图时,需要使用Re...

  • Android 通知栏

    通知栏服务 获取通知栏服务: 通知栏监听:继承NotificationListenerService,实现onNo...

  • RTOS(事件标志组)

    事件标志组的原理与创建 问题概述 设计原理 设计实现 事件标志组的等待与通知 设计需求 设计原理 设计实现 事件标...

  • Android Nofication详解(包括8.0适配)

    通知栏的作用 通知栏的主要目的就是将一些重要的信息即使告诉用户,通知栏的设计非常巧妙,不用占用空间,只是在通知栏显...

  • android设置消息角标

    xiaomi: 当应用向通知栏发送了一条通知 (除了进度条样式和常驻通知外),应用图标的右上角就会显示「1」。值得...

  • RTOS基础(事件控制块实现)

    时间控制块的原理与创建 问题概述 解决方案 事件控制块原理 设计实现 事件的等待与通知 概述 设计原理 设计实现 ...

  • uni-app使用plus实现安卓的常驻通知栏

    注意事项:必须进行本地打包才能生效,云打包无效,不知道官方什么时候才修复这个问题。目前使用的HBuilderX版本...

  • 【21】Notification

    一、什么是Notification? 是可以常驻在通知栏上的一种通知。可设置按钮来控制程序。 二、为什么要使用No...

  • [Android]展开/收起通知栏

    需要权限: 收起通知栏(经测能用) 展开通知栏(未测试) 转自文章:折叠与展开通知栏方法

网友评论

      本文标题:常驻通知栏的设计与实现

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