自定义View系列Manba陪你学AndroidAndroid开发

Android为应用添加角标

2017-04-12  本文已影响367人  唠嗑008

github地址(完整demo下载)

https://github.com/zhouxu88/AppBadge

效果图

APP角标.jpg

一些必要的说明

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

原理

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

<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

上一篇下一篇

猜你喜欢

热点阅读