Android之在app图标添加角标

作者: 学海摆渡人 | 来源:发表于2016-09-18 18:39 被阅读6707次

在做一些推送服务的时候,想在应用图标上添加未读消息,Android桌面角标的适配确实是非常坑爹的需求。原生系统根本就没有这个功能,国内很多厂家效仿ios都自己定义了该功能。

现在就为大家介绍部分机型添加角标的代码。

1、华为手机上显示角标:(已通过)

//添加权限
<uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE"/>

添加如下代码:

String launcherClassName = "com.redfinger.huaweichangebadge.MainActivity";//启动的Activity完整名称
Bundle localBundle = new Bundle();//需要存储的数据
localBundle.putString("package",context.getPackageName());//包名
localBundle.putString("class",launcherClassName);
localBundle.putInt("badgenumber",99);//未读信息条数
getContentResolver().call(
    Uri.parse("content://com.huawei.android.launcher.settings/badge/"),
    "change badge",null,localBundle);

2、小米手机上显示角标:(已通过)

private void setXiaoMiBadge(Context context,int number){
        try{
            Class miuiNotificationClass = Class.forName("android.app.MiuiNotification");
            Object miuiNotification = miuiNotificationClass.newInstance();
            Field field = miuiNotification.getClass().getDeclaredField("messageCount");
            field.setAccessible(true);
            field.set(miuiNotification,String.valueOf(number==0?"":number));
        }catch (Exception e){
            e.printStackTrace();
            // miui6之前
            Intent localIntent = new Intent("android.intent.action.APPLICATION_MESSAGE_UPDATE");
            localIntent.putExtra("android.intent.extra.update_application_component_name",context.getPackageName()+"/."+"MainActivity");
            localIntent.putExtra("android.intent.extra.update_application_message_text",String.valueOf(number==0?"":number));
            context.sendBroadcast(localIntent);
        }
    }

3、三星手机添加角标:(已通过)

String launcherClassName = "com.redfinger.huaweichangebadge.MainActivity";
Intent intent = new Intent("android.intent.action.BADGE_COUNT_UPDATE");
intent.putExtra("badge_count",99);
intent.putExtra("badge_count_package_name",getPackageName());
intent.putExtra("badge_count_class_name",launcherClassName);
sendBroadcast(intent);

4、索尼手机添加角标,找不到相关机型:(未测试)

private final String lancherActivityClassName =MainActivity.class.getName();
    
    private void sendToSony(Context context,String number) {
        boolean isShow = true;
        if ("0".equals(number)) {
            isShow = false;
        }
        Intent localIntent = new Intent();
        localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", isShow);//是否显示
        localIntent.setAction("com.sonyericsson.home.action.UPDATE_BADGE");
        localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME",lancherActivityClassName );//启动页
        localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", number);//数字
        localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME", context.getPackageName());//包名
        context.sendBroadcast(localIntent);
    }

相关文章

网友评论

  • 6434a5e4326e:为啥我的小米手机出不来
  • 235ddd3683c0:小米没有用
  • 爱神的蛋糕:华为手机报这个错误:java.lang.SecurityException: Permission Denial: reading com.huawei.android.launcher.LauncherProvider from pid=20604, uid=10542 requires com.huawei.android.launcher.permission.WRITE_SETTINGS: uid 10542 does not have com.huawei.android.launcher.permission.WRITE_SETTINGS.
    添加权限上去之后还是报错
    cb02499c62b3:@爱神的蛋糕 我按照华为角标的实现方法去写,还是没出来,版本也是支持的不知道什么原因,能一起交流交流不
    爱神的蛋糕:@绝心爱 解决了
    cb02499c62b3:你那个问题解决了没
  • 末日云游:给力,我已征求作者意见转载到极光推送的社区,大家有什么好文章也可以拿过来分享,分享有奖。https://community.jiguang.cn/c/share
  • 林不懂:不错,感谢

本文标题:Android之在app图标添加角标

本文链接:https://www.haomeiwen.com/subject/glrgettx.html