Android 为应用桌面 Logo 添加数字提醒

很早之前,项目中提到要在手机桌面上显示应用的消息数量角标,当时找了很多,最终效果都不理想。这两天又提到这个问题,今天在 GitHub 上找到了一个开源库 ShortcutBadger ,代码拉下来测试一番,公司的三星(5.0),华为(6.0),Vivo(5.1),小米(5.1)都能成功。

用法要么直接下载 Demo, 把 Library 引入项目,或者使用开源库首页介绍的用法。
添加依赖:

compile "me.leolin:ShortcutBadger:1.1.17@aar"

除了小米之外,其他的机型都是直接调用以下方法:

ShortcutBadger.applyCount(context, badgeCount)

小米系统中,需要通过另外的处理方法:

ShortcutBadger.applyNotification(getApplicationContext(), notification, badgeCount);

这个是需要一个新建一个单独的 Service , 代码如下:

public class BadgeIntentService extends IntentService {

    private int notificationId = 0;

    public BadgeIntentService() {
        super("BadgeIntentService");
    }

    private NotificationManager mNotificationManager;

    @Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
        mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        if (intent != null) {
            int badgeCount = intent.getIntExtra("badgeCount", 0);

            mNotificationManager.cancel(notificationId);
            notificationId++;

            Notification.Builder builder = new Notification.Builder(getApplicationContext())
                .setContentTitle("")
                .setContentText("")
                .setSmallIcon(R.drawable.ic_launcher);
            Notification notification = builder.build();
            ShortcutBadger.applyNotification(getApplicationContext(), notification, badgeCount);
            mNotificationManager.notify(notificationId, notification);
        }
    }
}

Service 要记得在 manifest 中进行配置。

<service
            android:name=".BadgeIntentService"
            android:exported="false" />

另外需要注意一下,小米手机中,通知栏设置一定要打开显示角标。

新建一个工具类,在里面判断小米机型,然后直接调用该工具类方法:

public class BadgeUtil {

    public static void applyBadgeCount(Context context, int badgeCount) {
        if (Build.MANUFACTURER.equalsIgnoreCase("Xiaomi")) {
            // 判断机型是否是小米
            context.startService(new Intent(context, BadgeIntentService.class).putExtra("badgeCount", badgeCount));
        } else {
            ShortcutBadger.applyCount(context, badgeCount);
        }
    }

    public static void removeBadgeCount(Context context) {
        ShortcutBadger.removeCount(context);
    }
}

2017年11月29日更新

这里有个新的设置桌面角标的库,可能会比上面所使用的好一些(未亲测),BadgeNumberManager

你可能感兴趣的:(Android)