Android Badge 角标 总结

Android Badge 角标 总结

  • 众所周知,App桌面角标,原来仅在iOS上面有,安卓原生是不支持的,如果需要为App添加角标,需要使用到各大厂商自己的实现
  • 大多数的厂商都是通过广播形式实现App角标,即App内部通过发送广播,更新桌面角标。
  • 发送广播需要初始化Intent,然后往里面put参数,但各个厂商的put的参数不一定一样,这就需要开发者在根据各个厂商做适配。
  • 但万能的Google帮我搜索到了第三方库BadgeUtil,方便角标操作。原理很简单,匹配当前Launcher名称,找到相对应的Badge实现类,不同的Badge实现会适配各自厂商的Launcher。
  • 这库很方便,省了不少查文档的时间。

Badge与推送

角标有一个较常用的场景,就是在接收到推送时,在原有数字上+1

  1. 这里只需要App维护着一个当前Badge的数字,因为这个数字通过广播发送给系统后,但不能从系统获取,所以要做+1操作,必须自己维护着当前数值,收到推送后,手动发送广播,设置当前数值。
  2. 上面的一点,发现了某种情况下,在小米手机上不适用

    1) 首先是小米手机如果要更新角标,就必须在通知栏发送一个通知。 
     
    2) App不处于最前端的情况下,才能更新角标(例如:当前处于App的其中一个Activity在显示状态,不能更新角标的) 
     
    3) 若是用极光推送(我只用过极光), 而且使用发送通知 
    Android Badge 角标 总结_第1张图片 
    这个时候极光会自动在通知发送一个通知,如果App不在最前面,角标会自动+1,这就是 
    这时候就是等于小米可以跟极光已经配合做好角标了,不需要我们做什么,如果这时候我们再手动更新角标,则用户会收到两条通知,所以在发送之前需要判断一下是否小米手机。

    if (!isXiaoMi(context)) {
            ShortcutBadger.applyCount(context, badgeCount);
    }
    
    public static boolean isXiaoMi(Context context) {
        if (TextUtils.isEmpty(mCurrentLauncherName)) {
            mCurrentLauncherName = getCurrentLaunchname(context);
        }
        boolean isConain = false;
        if (mCurrentLauncherName.contains("Xiaomi")) {
            return true;
        }
    
        if (mCurrentLauncherName.contains("miui")) {
            return true;
        }
        return false;
    }
    
    public static String getCurrentLaunchname(Context context) {
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_HOME);
        ResolveInfo resolveInfo = context.getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
    
        if (resolveInfo == null || resolveInfo.activityInfo.name.toLowerCase().contains("resolver"))
            return "";
    
        return resolveInfo.activityInfo.packageName;
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

总结一下:

就是小米手机需要在更新角标前做一些特别判断,其它的就直接用第三方库更新就可以了。

你可能感兴趣的:(Android)