github地址(完整demo下載)
https://github.com/zhouxu88/AppBadge
效果圖
APP角標.jpg
可以看到圖中的環(huán)信單聊這個app右上角的紅色的圓圈,里面有6這個數(shù)字的,就是一種角標党晋。
角標桌粉,英語是badge,也就是“徽章,像章嗅回,獎章辣苏; 象征肝箱,標記”的意思。
一般來說稀蟋,應用的角標是用來標記有多少條提醒(Notification)沒讀(unread)狭园,一旦點擊提示進應用閱讀了,角標也會消失糊治。
一些必要的說明
角標原本是蘋果的iOS中的東西唱矛,Android原生并不支持角標,因為Google的意思是讓大家用Notification(提示欄)即可,不過無妨绎谦,厲害的Android第三方廠商可以通過在自定義的Launcher(啟動器)中操作來實現(xiàn)添加角標管闷。
原理
添加角標的原理就是發(fā)送一個Broadcast(廣播),在廣播的Intent中指定需要被添加角標的應用的packageName(包名)窃肠,className(類名)包个,count(角標數(shù)目)。當然了冤留,不同廠商的手機的角標操作的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