android 桌面图标消息红点

作者: 好多个胖子 | 来源:发表于2018-08-02 16:07 被阅读120次

    前言

    消息通知是大多数用户类app都会用到的功能,这里介绍的是当有新消息的时候,app的桌面图标像微信和qq那样右上角出现红色的消息数量红点。实现代码分为8.0-版本8.0+版本

    aaa.png

    android 8.0+ (版本号 26 名称 O)

    8.0+的系统直接使用新版本的消息通知渠道NotificationChannel即可设置桌面红点

     //测试通知
        public void testNotify(View v) {
            NotificationCompat.Builder builder;
            //8.0
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                builder = new NotificationCompat.Builder(this, getChannelId());
            } else {
                builder = new NotificationCompat.Builder(this, null);
                //8.0以下版本桌面红点显示
                // TODO: 2018/8/2  
            }
    
            builder.setSmallIcon(R.mipmap.ic_launcher)
                    .setDefaults(Notification.DEFAULT_ALL)
                    .setTicker("title")
                    .setAutoCancel(true)
                    .setContentTitle("contentTitle")
                    .setContentText("contentText");
    
            mNotificationManager.notify(123, builder.build());
        }
    
    
        @RequiresApi(api = Build.VERSION_CODES.O)
        public String getChannelId() {
            final String channelId = "1";
            final String channelName = "com.mmc.tj";
    
            NotificationChannel channel = new NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_DEFAULT);
            channel.enableLights(true);//显示桌面红点
            channel.setLightColor(Color.RED);
            channel.setShowBadge(true);
            mNotificationManager.createNotificationChannel(channel);
            return channel.getId();
        }
    

    android 8.0以下版本

    8.0以下版本的桌面红点需要借助开源库ShortcutBadger,这个库是专门用来帮助Android开发者快速生成桌面角标的。这个库并不是所有的机型都适配,对于主流的华为,xiaomi,三星,oppo支持,魅族和酷派等就不行,使用方法其实很简单,在github主页都有介绍:

    //测试通知
        public void testNotify(View v) {
            NotificationCompat.Builder builder;
            //8.0
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                builder = new NotificationCompat.Builder(this, getChannelId());
            } else {
                builder = new NotificationCompat.Builder(this, null);
                //8.0以下版本桌面红点显示
                 ShortcutBadger.applyCount(context, ++sMessageCount);
            }
    
            builder.setSmallIcon(R.mipmap.ic_launcher)
                    .setDefaults(Notification.DEFAULT_ALL)
                    .setTicker("title")
                    .setAutoCancel(true)
                    .setContentTitle("contentTitle")
                    .setContentText("contentText");
    
            mNotificationManager.notify(123, builder.build());
        }
    

    红点的取消

    8.0+的系统不用我们去实现,app运行为前台进程时就自动取消了。对于8.0-版本通过ShortcutBadger库实现的,我们依然希望只要app任何一个界面一打开,就能取消红点,实现的思路如下

    
    //创建一个Application.ActivityLifecycleCallbacks,该类可以监听每一个activity的生命周期
    public class BaseAppLifeCycle implements Application.ActivityLifecycleCallbacks {
    
    
        public  void init(Application application) {
            application.registerActivityLifecycleCallbacks(this);
        }
    
        @Override
        public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
    
        }
    
        @Override
        public void onActivityStarted(Activity activity) {
    
        }
    
    
        //注册该监听以后,app的每一个activity的生命周期都会调用该callback的对应方法
        @Override
        public void onActivityResumed(Activity activity) {
            //app不管哪个界面可见,桌面红点即消失
             ShortcutBadger.applyCount(context,0);
        }
    
        @Override
        public void onActivityPaused(Activity activity) {
    
        }
    
        @Override
        public void onActivityStopped(Activity activity) {
    
        }
    
        @Override
        public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
    
        }
    
        @Override
        public void onActivityDestroyed(Activity activity) {
    
        }
    }
    
    
    
    //在Application中注册该监听
    
    public class BaseApplication extends Application {
    
        @Override
        public void onCreate() {
            super.onCreate();
            new BaseAppLifeCycle().init(this);
        }
        
    }
    

    相关文章

      网友评论

        本文标题:android 桌面图标消息红点

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