美文网首页Android知识安卓进阶
Android 小米角标无法修改问题研究

Android 小米角标无法修改问题研究

作者: 一个冬季 | 来源:发表于2018-04-08 17:35 被阅读61次

    参考文献:
    https://blog.csdn.net/uyy203/article/details/70160752?locationNum=15&fps=1 (延迟修改角标)
    https://github.com/leolin310148/ShortcutBadger (修改角标代码)
    https://blog.csdn.net/kongbaidepao/article/details/48317813 (APP内无法修改角标)
    在修改角标的时候,小米一直存在一个问题,我按照官网的代码去修改角标数量,你会发现第一次修改成功(比如你要显示10条),第二次修改失败(比如你要显示11条),但是你会发现它又默认会从1开始。

    如果你在APP里面是无法修改角标的,你要在桌面才能修改角标

    解决办法是针对小米系统增加延时的操作显示

         //延迟操作
     new Handler().postDelayed(new ShortCutRunnable(count,notification,notifId,notificationManager),600);
     /**
         *作者:GaoXiaoXiong
         *创建时间:2018/4/8
         *注释描述:延迟显示角标个数,解决小米不正确显示角标
         */
     class ShortCutRunnable implements Runnable{
            private int count;//要显示的个数
            private int notifId;//可以采用System.currentTimeMillis()
            private Notification notification;
            private NotificationManager notificationManager;
            public ShortCutRunnable(int count, Notification notification,int notifId,NotificationManager notificationManager) {
                this.count = count;
                this.notification = notification;
                this.notifId = notifId;
                this.notificationManager = notificationManager;
            }
    
            @Override
            public void run() {
                try {
                    ShortCutBadgerCount.getShortCutBadgerCount().clearCount();//我自己定义的
                    Field field = notification.getClass().getDeclaredField("extraNotification");
                    Object extraNotification = field.get(notification);
                    Method method = extraNotification.getClass().getDeclaredMethod("setMessageCount", int.class);
                    method.invoke(extraNotification, count);//显示个数
                } catch (Exception e) {
                    BAFLogger.e(TAG,e.getMessage());
                }
                notificationManager.notify(notifId, notification);//显示通知
            }
        }
    

    ShortCutBadgerCount.java

    /**
     * 创建时间: 2018/4/4
     * gxx
     * 注释描述:角标个数
     */
    public class ShortCutBadgerCount {
        private ShortCutBadgerCount() {
        }
        private int cutCount=0;
        private volatile static ShortCutBadgerCount shortCutBadgerCount;
        public static ShortCutBadgerCount getShortCutBadgerCount(){
            if (shortCutBadgerCount==null){
                synchronized (ShortCutBadgerCount.class){
                    if (shortCutBadgerCount==null){
                        shortCutBadgerCount = new ShortCutBadgerCount();
                    }
                }
            }
            return shortCutBadgerCount;
        }
        /**
         *作者:GaoXiaoXiong
         *创建时间:2018/4/4
         *注释描述:添加1个角标
         */
        public int addCount(){
            this.cutCount+=1;
            setCutCount(this.cutCount);
            return cutCount;
        }
        /**
         *作者:GaoXiaoXiong
         *创建时间:2018/4/4
         *注释描述:设置个数
         */
        public void setCutCount(int cutCount) {
            this.cutCount = cutCount;
        }
        /**
         *作者:GaoXiaoXiong
         *创建时间:2018/4/8
         *注释描述:消息个数
         */
        public int getCutCount() {
            return cutCount;
        }
        /**
         *作者:GaoXiaoXiong
         *创建时间:2018/4/4
         *注释描述:清零
         */
        public void clearCount(){
            cutCount = 0;
        }
        /**
         *作者:GaoXiaoXiong
         *创建时间:2018/4/8
         *注释描述:销毁
         */
        public void destory(){
            if (shortCutBadgerCount!=null){
                removeShortcutBadgerACount();
                shortCutBadgerCount=null;
            }
        }
    
        /**
         *作者:GaoXiaoXiong
         *创建时间:2018/4/8
         *注释描述:移除角标和清空统计的角标个数
         */
        public void removeShortcutBadgerACount(){
            ShortcutBadger.removeCount(ABSApplication.getApplication()); //移除桌面角标
            ShortCutBadgerCount.getShortCutBadgerCount().clearCount();//清除个数
        }
    }
    

    相关文章

      网友评论

        本文标题:Android 小米角标无法修改问题研究

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