Android開發之應用角標開發教程

目前來說 原生的Android系統,是不支持應用角標的

所以各大手機廠商便自己定制Launcher來實現,然後提供接口給外部使用。然而就會出現每個手機品牌廠商的方式各不相同

這裡寫圖片描述

特殊機型適配

華為系列

?? 華為角標官方文檔 : http://developer.huawei.com/cn/consumer/wiki/index.php?title=%E5%8D%8E%E4%B8%BA%E6%A1%8C%E9%9D%A2%E8%A7%92%E6%A0%87%E4%BB%8B%E7%BB%8D

1 在AndroidManifest.xml中申請華為角標權限

2 參考以下代碼,設置應用角標即可

Bundle bundle = new Bundle();
bundle.putString(“package”, context.getPackageName());
String launchClassName = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()).getComponent().getClassName();
bundle.putString(“class”, launchClassName);
bundle.putInt(“badgenumber”, msgCount);
context.getContentResolver().call(Uri.parse(“content://com.huawei.android.launcher.settings/badge/”), “change_badge”, null, bundle);

小米系列

??小米角標官方文檔 : https://dev.mi.com/docs/appsmarket/technical_docs/badge/

MIUI6&7上重新設計瞭桌面app圖標的角標顯示,基本規則如下:

一、基本介紹

1、默認的情況

當app 向通知欄發送瞭一條通知 (通知不帶進度條並且用戶可以刪除的),那麼桌面app icon角標就會顯示1.此時app顯示的角標數是和通知欄裡app發送的通知數對應的,即向通知欄發送瞭多少通知就會顯示多少角標。

2、通知可以定義角標數

例如 有5封未讀郵件,通知欄裡隻會顯示一條通知,但是想讓角標顯示5. 可以在發通知時加個標示。

二、實現代碼

第三方app需要用反射來調用,參考代碼:

NotificationManager mNotificationManager = (NotificationManager) this

.getSystemService(Context.NOTIFICATION_SERVICE);

Notification.Builder builder = new Notification.Builder(this)

.setContentTitle(“title”).setContentText(“text”).setSmallIcon(R.drawable.icon);

Notification notification = builder.build();

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();

}

mNotificationManager.notify(0,notification);

OPPO系列

??
?? 官方文檔中介紹

一、應用角標介紹
1. ColorOS 的角標功能是 OPPO 手機提供給各應用展示未讀信息的操作功能之一,
可以實現在應用圖標右上角顯示未讀通知數量,便於用戶及時處理;
2. OPPO 始終站在用戶的角度,為用戶提供更好的服務體驗。為瞭防止角標信息泛
濫,對用戶造成困擾,故 ColorOS 的角標主要采取邀請制的形式,未邀請的應用
需主動申請,經 OPPO 方評審通過後,方可接入。
二、應用角標開放原則
OPPO 手機為瞭保護用戶體驗,ColorOS 的角標功能主要采取邀請制為主,開發者主
動申請為輔的原則,推送內容需遵循國傢規范,其中營銷類和推廣類應用暫不接受申請
1. 從保護用戶體驗的角度出發,ColorOS 的角標功能采取邀請制,暫時隻邀請用戶
量較大的即時通信類、郵件類應用;
2. 未收到邀請的應用,角標接入需按照流程主動申請,經 OPPO 方評估後,應用角
標能夠提升用戶體驗的應用,方可通過申請;
3. 申請接入應用角標的應用必須不違反國傢或地方相關法律和政策規定;
4. ColorOS 的角標功能不允許應用發出營銷活動、廣告等任何商業推廣類通知。
三、應用角標申請規范
1. 應用成功申請 ColorOS 的角標功能後,在不違反相關法律法規、OPPO 開放平臺
管理規定及本規范的情況下,將始終保留該應用的角標功能,除非 OPPO 方終止
應用角標的運營;
2. 當出現如下情形,OPPO 方有權取消其角標權限:
a) 應用未經 OPPO 方允許,擅自推送不符合 ColorOS 的角標開放原則的通知,
取消其角標權限;
b) 收到用戶反饋或經 OPPO 方發現,該應用角標打擾瞭用戶手機的正常使用,
經 OPPO 方調查屬實,取消其角標權限;
c) 由應用方原因造成該應用角標功能異常的,將取消其角標權限。 四、應用角標申請流程
備註:當開發者對應用角標申請結果存有異議時,可通過郵件或在線客服的形式,聯系 OPPO 開放平
臺(客服郵箱:devkefu@oppo.com)。
五、應用角標申請方式
開發者可通過郵件的形式提交申請,郵件形式如下:
1. 主題:“申請開放 OPPO 手機應用角標權限——(應用名稱)”
2. 收件人:devtec@oppo.com
3. 正文:詳見——應用角標申請所需材料
六、應用角標申請所需材料
1. 應用方申請人基本信息(姓名、郵箱、手機、微信);
2. 應用方廠商介紹(不少於 200 字);
3. 申請應用近一個月內 IOS 與安卓系統的平均日活量及總下載量介紹;
4. 申請應用產品主要功能介紹(不少於 100 字);
5. 申請應用期望角標出現的全部場景。 七、應用角標審核周期
應用方以郵件的形式申請接入角標後,OPPO 方審核人員將在接收日期 10 個工作日內
給出審核結果。
八、常見問題 FAQ
1. 問:在其他非 OPPO 手機上是否可以使用 OPPO 手機的應用角標功能?
答:不可以,隻能支持 OPPO 設備的功能,且系統版本必須在 ColorOS 3.0 及以上
2. 問:ColorOS 的角標申請周期一般有多長時間?
答:ColorOS 的角標申請周期為 7-10 個工作日,請開發者耐心等待。
3. 問:對審核結果存有異議,如何進行申訴?
答:開發者如果對申請開放 OPPO 應用角標權限的審核結果存有異議,可以發送郵件
至 devkefu@oppo.com,或聯系 OPPO 開放平臺在線客服與我們取得聯系。 九、權益說明
本規則由 OPPO 開放平臺擬定,在法律范圍內的最終解釋權歸 OPPO 開放平臺所有。
OPPO 開放平臺有權根據業務發展需求實時更新該規范,並將最新規范公佈於 OPPO 開放
平臺公告欄中,若開發者在最新規范公佈後決定繼續使用角標的,視為同意接受最新規范的
約束。若拒絕接受最新規范的約束,則開放平臺有權暫停提供角標服務。
註:本規則 2017 年 09 月 26 日發佈,自 2017 年 09 月 26 日起正式生效。
??
示例 :
?? Intent intent = new Intent(“launcher.action.CHANGE_APPLICATION_NOTIFICATION_NUM”);
intent.putExtra(“packageName”, context.getPackageName());
intent.putExtra(“className”, componentName.getClassName());
intent.putExtra(“notificationNum”, badgeCount);
context.sendBroadcast(intent);

VIVO系列

??
?? 暫未找到官方文檔

示例 :

Intent intent = new Intent(“launcher.action.CHANGE_APPLICATION_NOTIFICATION_NUM”);
intent.putExtra(“packageName”, context.getPackageName());
String launchClassName = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()).getComponent().getClassName();
intent.putExtra(“className”, launchClassName);
intent.putExtra(“notificationNum”, msgCount);
context.sendBroadcast(intent);

Sony系列
?? 參考資料:https://developer.sony.com/2016/06/23/xperia-home-badge-api-now-publicly-available/


下面介紹一下 相關開源庫

https://github.com/lixiangers/BadgeUtil
此開源庫 廠商品牌並不全面 可進行學習之用

https://github.com/leolin310148/ShortcutBadger
這個開源庫 相對來說還是很全面的 不過oppo的由於需要申請 暫未測試 vivo不可用(暫未查詢相關原因)
目前測試的三星,華為可行

使用方式也非常簡單

Add mavenCentral to your build script.

repositories {
mavenCentral()
}

Add dependencies for ShortcutBadger, it’s available from maven now.

dependencies {
compile “me.leolin:ShortcutBadger:1.1.19@aar”
}

Add the codes below:

int badgeCount = 1;
ShortcutBadger.applyCount(context, badgeCount); //for 1.1.4+
ShortcutBadger.with(getApplicationContext()).count(badgeCount); //for 1.1.3

If you want to remove the badge

ShortcutBadger.removeCount(context); //for 1.1.4+
ShortcutBadger.with(getApplicationContext()).remove(); //for 1.1.3
or

ShortcutBadger.applyCount(context, 0); //for 1.1.4+
ShortcutBadger.with(getApplicationContext()).count(0); //for 1.1.3

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *