欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android为应用添加数字角标的简单实现

程序员文章站 2023-01-21 10:11:53
角标,英语是badge,也就是“徽章,像章,奖章; 象征,标记”的意思。 效果图 可以看到图中的环信单聊这个app右上角的红色的圆圈,里面有6这...

角标,英语是badge,也就是“徽章,像章,奖章; 象征,标记”的意思。

效果图

Android为应用添加数字角标的简单实现

可以看到图中的环信单聊这个app右上角的红色的圆圈,里面有6这个数字的,就是一种角标。

一般来说,应用的角标是用来标记有多少条提醒(notification)没读(unread),一旦点击提示进应用阅读了,角标也会消失。

一些必要的说明

角标原本是苹果的ios中的东西,android原生并不支持角标,因为google的意思是让大家用notification(提示栏)即可,不过无妨,厉害的android第三方厂商可以通过在自定义的launcher(启动器)中操作来实现添加角标。

原理

添加角标的原理就是发送一个broadcast(广播),在广播的intent中指定需要被添加角标的应用的packagename(包名),classname(类名),count(角标数目)。当然了,不同厂商的手机的角标操作的intent的action是不一样的。

在androidmanifest.xml中添加读取和写入角标的权限:

<uses-permission android:name="com.sec.android.provider.badge.permission.read" />
<uses-permission android:name="com.sec.android.provider.badge.permission.write" />

设置角标和清除角标的工具类

public class badgeutils {
  private static final string intent_action = "android.intent.action.badge_count_update";
  private static final string intent_extra_badge_count = "badge_count";
  private static final string intent_extra_packagename = "badge_count_package_name";
  private static final string intent_extra_activity_name = "badge_count_class_name";

  //设置角标
  public static void setbadgecount(context context, int badgecount) {
    intent intent = new intent(intent_action);
    intent.putextra(intent_extra_badge_count, badgecount);
    intent.putextra(intent_extra_packagename, getcomponentname(context).getpackagename());
    intent.putextra(intent_extra_activity_name, getcomponentname(context).getclassname());
    context.sendbroadcast(intent);
  }

  //清除角标
  public static void removebadge(context context){
    setbadgecount(context,0);
  }

  //获取componentname
  private static componentname getcomponentname(context context) {
    return context.getapplicationcontext().getpackagemanager()
        .getlaunchintentforpackage(context.getapplicationcontext().getpackagename())
        .getcomponent();
  }
}

注意:

因为不同手机厂商的action不同,所以可能导致某些手机不能使用,在此推荐一个github的第三方库:https://github.com/leolin310148/shortcutbadger

github地址:https://github.com/zhouxu88/appbadge

完整demo下载地址:appbadge_jb51.rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。