Android为应用添加角标

作者: 唠嗑008 | 来源:发表于2017-04-12 10:44 被阅读367次

    github地址(完整demo下载)

    https://github.com/zhouxu88/AppBadge

    效果图

    APP角标.jpg
    • 可以看到图中的环信单聊这个app右上角的红色的圆圈,里面有6这个数字的,就是一种角标。

    • 角标,英语是badge,也就是“徽章,像章,奖章; 象征,标记”的意思。

    • 一般来说,应用的角标是用来标记有多少条提醒(Notification)没读(unread),一旦点击提示进应用阅读了,角标也会消失。

    一些必要的说明

    角标原本是苹果的iOS中的东西,Android原生并不支持角标,因为Google的意思是让大家用Notification(提示栏)即可,不过无妨,厉害的Android第三方厂商可以通过在自定义的Launcher(启动器)中操作来实现添加角标。

    原理

    添加角标的原理就是发送一个Broadcast(广播),在广播的Intent中指定需要被添加角标的应用的packageName(包名),className(类名),count(角标数目)。当然了,不同厂商的手机的角标操作的Intent的action是不一样的。

    • 在AndroidManifest.xml中添加读取和写入角标的权限:
    <uses-permission android:name="com.sec.android.provider.badge.permission.READ" />
    <uses-permission android:name="com.sec.android.provider.badge.permission.WRITE" />
    
    • 设置角标和清除角标的工具类
    public class BadgeUtils {
        private static final String INTENT_ACTION = "android.intent.action.BADGE_COUNT_UPDATE";
        private static final String INTENT_EXTRA_BADGE_COUNT = "badge_count";
        private static final String INTENT_EXTRA_PACKAGENAME = "badge_count_package_name";
        private static final String INTENT_EXTRA_ACTIVITY_NAME = "badge_count_class_name";
    
        //设置角标
        public static void setBadgeCount(Context context, int badgeCount) {
            Intent intent = new Intent(INTENT_ACTION);
            intent.putExtra(INTENT_EXTRA_BADGE_COUNT, badgeCount);
            intent.putExtra(INTENT_EXTRA_PACKAGENAME, getComponentName(context).getPackageName());
            intent.putExtra(INTENT_EXTRA_ACTIVITY_NAME, getComponentName(context).getClassName());
            context.sendBroadcast(intent);
        }
    
        //清除角标
        public static void removeBadge(Context context){
            setBadgeCount(context,0);
        }
    
        //获取ComponentName
        private static ComponentName getComponentName(Context context) {
            return context.getApplicationContext().getPackageManager()
                    .getLaunchIntentForPackage(context.getApplicationContext().getPackageName())
                    .getComponent();
        }
    }
    

    注意:
    因为不同手机厂商的action不同,所以可能导致某些手机不能使用,在此推荐一个github的第三方库
    https://github.com/leolin310148/ShortcutBadger

    相关文章

      网友评论

      • cb02499c62b3:要实现角标这个功能是不是要到各大厂商去申请证书?

      本文标题:Android为应用添加角标

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