android设置消息角标
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android设置消息角标相关的知识,希望对你有一定的参考价值。
参考技术A xiaomi:当应用向通知栏发送了一条通知 (除了进度条样式和常驻通知外),应用图标的右上角就会显示「1」。值得一提,角标的数字代表应用的通知数,即应用发送了「x」条通知,角标就会显示为「x」。
try
Field field = notification.getClass().getDeclaredField(“extraNotification”);
Object extraNotification = field.get(notification);
Method method = extraNotification.getClass().getDeclaredMethod(“setMessageCount”, int.class);
method.invoke(extraNotification, mCount);
catch (Exception e)
e.printStackTrace();
huawei:
BadgeNotification add_num 否 integer 应用角标累加数字非应用角标实际显示数字 例如,某应用当前有N条未读消息,若add_num设置为3,则每发一次消息,应用角标显示的数字累加3,为N+3
/** set badge number*/
public void setBadgeNum(int num)
try
Bundle bunlde = new Bundle();
bunlde.putString("package", "com.test.badge"); // com.test.badge is your package name
bunlde.putString("class", "com.test. badge.MainActivity"); // com.test. badge.MainActivity is your apk main activity
bunlde.putInt("badgenumber", num);
this.getContentResolver().call(Uri.parse("content://com.huawei.android.launcher.settings/badge/"), "change_badge", null, bunlde);
catch (Exception e)
mIsSupportedBade = false;
oppo:
老版本方法
private static boolean setOPPOBadge(int count, Context context)
try
Bundle extras = new Bundle();
extras.putInt("app_badge_count", count);
context.getContentResolver().call(Uri.parse("content://com.android.badge/badge"),
"setAppBadgeCount", String.valueOf(count), extras);
return true;
catch (Exception e)
e.printStackTrace();
return false;
private static boolean setOPPOBadge2(int count, Context context)
try
Intent intent = new Intent("com.oppo.unsettledevent");
intent.putExtra("packageName", context.getPackageName());
intent.putExtra("number", count);
intent.putExtra("upgradeNumber", count);
PackageManager packageManager = context.getPackageManager();
List<ResolveInfo> receivers = packageManager.queryBroadcastReceivers(intent, 0);
if (receivers != null && receivers.size() > 0)
context.sendBroadcast(intent);
else
Bundle extras = new Bundle();
extras.putInt("app_badge_count", count);
context.getContentResolver().call(Uri.parse("content://com.android.badge/badge"),
"setAppBadgeCount", null, extras);
return true;
catch (Exception e)
e.printStackTrace();
return false;
新版本:
新款的OPPO角标功能仅支持内置应用、微信和QQ显示角标,若要使用角标功能,必须提交申请,审核通过了才能开放,官方给的具体审核标准如下:
申请角标接入规则(应用必须适配OPPO手机,保证角标功能测试通过)
a) 系统应用;
b) 国内外各区域用户量排名Top5的三方即时通讯类应用,且只允许显示即时通信消息类通知(如QQ、微信、facebook、line);
c) OPPO公司内部费商业化及运营性质的办公类型即时通信应用(如Teamtalk);
d) 国内外邮件类应用(各区域各属于用户量第一梯队的应用)。
vivo:
桌面图标角标”默认关闭,需要用户手动开启。
开启路径:“设置”-“通知与状态栏”-“应用通知管理”-应用名称-“桌面图标角标”。
未成功接入“桌面图标角标”的应用,无“桌面图标角标”选项。
备注:视OS版本差异,“桌面图标角标”名称可能为“应用图标标记”或“桌面角标”。
a. 添加权限:
<uses-permission android:name="com.vivo.notification.permission.BADGE_ICON" />
b. 应用在需要显示桌面角标的场景,通过广播将信息发送给vivoLauncher:
广播参数:
action:launcher.action.CHANGE_APPLICATION_NOTIFICATION_NUM
packageName:应用包名
className:主类名
notificationNum:未读消息数目
简单示例:
Intent intent = new Intent();
int missedCalls = 10;
intent.setAction("launcher.action.CHANGE_APPLICATION_NOTIFICATION_NUM");
intent.putExtra("packageName", "com.android.xxxx");
intent.putExtra("className", "com.android.xxxx.Mainxxxx");
intent.putExtra("notificationNum", missedCalls);
intent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
sendBroadcast(intent);
注意:
在8.0上,还需要给Intent加上下面的flag
Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND
sansung:
private static boolean setSamsungBadge(int count, Context context)
try
String launcherClassName = getLauncherClassName(context);
if (TextUtils.isEmpty(launcherClassName))
return false;
Intent intent = new Intent("android.intent.action.BADGE_COUNT_UPDATE");
intent.putExtra("badge_count", count);
intent.putExtra("badge_count_package_name", context.getPackageName());
intent.putExtra("badge_count_class_name", launcherClassName);
context.sendBroadcast(intent);
return true;
catch (Exception e)
e.printStackTrace();
return false;
Android系统实现应用角标未读消息数原理
什么叫应用桌面角标 (BadgeNumber)?
即,未读消息通过在应用图标右上角显示数字提示用户的形式。也可以在通知栏里通知,消息阅读后,角标可以减少和消失。
实现原理:
其实本来 Android 原生系统是不支持应用桌面角标 (BadgeNumber) 显示的。并不是应用本身处理对启动图标进行修改,图标的动态修改的过程主要是在Launcher里面完成的。在应用安装,更新,卸载的时候,都会有广播发出,Launcher在LauncherApplication 中注册广播,在LauncherModel中处理接收到广播的消息,重新加载更新应用信息(如:应用图标、文字等)。而是在强大的第三方Android手机厂商(如:三星、小米)的系统源码深度定制下、通过修改了Launcher源代码,增加/注册了新的广播接收器用来接收应用发送来的未读消息数广播,接收到广播后,系统将未读消息的数目显示事件交给Launcher去处理,调用相关方法去重绘应用的icon,最终达到动态更新应用图标的效果。
可参考的角标实现:
以上是关于android设置消息角标的主要内容,如果未能解决你的问题,请参考以下文章