Android 进阶之旅 | 为应用添加角标

1、需求说明

最近公司要在安卓应用中学习ios---为应用添加角标,所以就查阅了大量的资料。

2、比较好用的github项目

安卓本身是没有角标这个api的,不过为了迎合市场,模仿IOS,各大手机厂商定制了自己的Launcher(启动器)中操作来实现添加角标。

在github上找到一个比较好用的项目 https://github.com/leolin310148/ShortcutBadger

蛮多人支持的哦!!

3、原理解析

这个项目整合了目前主流的Android手机的角标展示。做了兼容处理。而且代码结构非常简单清晰。

华为手机的角标原理是:发送广播

Intent intent =new Intent(INTENT_ACTION);

intent.putExtra(INTENT_EXTRA_BADGE_COUNT, badgeCount);

intent.putExtra(INTENT_EXTRA_PACKAGENAME, componentName.getPackageName());

intent.putExtra(INTENT_EXTRA_ACTIVITY_NAME, componentName.getClassName());

intent.putExtra("badge_vip_count",0);

if (BroadcastHelper.canResolveBroadcast(context, intent)) {

context.sendBroadcast(intent);

}else {

throw new ShortcutBadgeException("unable to resolve intent: " + intent.toString());

}

小米手机比较不好兼容,作者也弃用了小米的兼容工具类,不过有些手机还是可以的(具体的可以自己看作者写的哈),这里我附上小米官网给的角标处理代码:

https://dev.mi.com/doc/p=3904/index.html

https://dev.mi.com/console/doc/detail?pId=939

作者也都有写


3.1、比较尴尬的小米手机兼容问题

我用的red mi note 4x ,这部手机比较不好兼容,反正这个项目不满足我们的需求。

我分析了项目的源码,还有note 4x的效果,发现这部手机必须要通过notification 来修改角标数量。

if (resolveInfo ==null) {

Intent intent =new Intent(Intent.ACTION_MAIN);

intent.addCategory(Intent.CATEGORY_HOME);

resolveInfo = context.getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);

}

if (resolveInfo !=null) {

NotificationManager mNotificationManager = (NotificationManager) context

.getSystemService(Context.NOTIFICATION_SERVICE);

Notification.Builder builder =new Notification.Builder(context)

.setContentTitle("")

.setContentText("")

.setSmallIcon(resolveInfo.getIconResource());

Notification notification = builder.build();

mNotificationManager.cancel(notificationId);

notificationId++;

try {

Field field = notification.getClass().getDeclaredField("extraNotification");

Object extraNotification = field.get(notification);

Method method = extraNotification.getClass().getDeclaredMethod("setMessageCount",int.class);

method.invoke(extraNotification, badgeCount);

mNotificationManager.notify(notificationId, notification);

}catch (Exception e) {

throw new ShortcutBadgeException("not able to set badge", e);

}

}


我们在处理角标的同事还有通知,这样的话每次出现通知的同时,还一个空白的通知,于是我把这个方法放在通知里面,做了兼容处理。把这里注释了。

编译,运行,完美兼容。哈哈哈


当然也有一些其他手机还没有做到全面测试(测试机确实不够),只能遇到问题解决问题了


5、Android 8.0 通知栏角标适配

我在做华为手机(android 8.0)通知栏测试的时候,通知栏始终不出来。在这里要感谢一个博客:https://blog.csdn.net/guolin_blog/article/details/79854070,这个博客拨云见日,让我做好了android 8.0的通知的适配。

这个博客讲的非常详细,可以自己去看看。

你可能感兴趣的:(Android 进阶之旅 | 为应用添加角标)