Android之在app图标添加角标
在做一些推送服务的时候,想在应用图标上添加未读消息,Android桌面角标的适配确实是非常坑爹的需求。原生系统根本就没有这个功能,国内很多厂家效仿ios都自己定义了该功能。现在就为大家介绍部分机型添加角标的代码。
1.华为手机上显示角标:(已通过测试)
//添加权限
<uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE"/>
在需要的地方添加如下代码:
//启动的Activity完整名称
String launcherClassName = "com.redfinger.huaweichangebadge.MainActivity";
//需要存储的数据
Bundle localBundle = new Bundle();
//包名
localBundle.putString("package",context.getPackageName());
//启动的Activity完整名称
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);
}
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。