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系统 应用图标显示未读消息数(BadgeNumber) 桌面app图标的角标显示

Android开发:史上最全Android应用角标适配方法

有关 Android 应用桌面角标 (BadgeNumber) 实现的探讨

以上是关于android设置消息角标的主要内容,如果未能解决你的问题,请参考以下文章

Android 关于集成环信如何设置桌面角标

Android 关于集成环信如何设置桌面角标

Android系统 应用图标显示未读消息数(BadgeNumber) 桌面app图标的角标显示

友盟ios推送时怎么设置body参数

Android 为应用添加数字角标

Android Badge给应用添加角标