安卓手機角標(biāo)顯示方案

一些應(yīng)用,尤其是IM應(yīng)用,在很多場景系統(tǒng)會推送未讀消息;這個時候除了通知欄的提醒,還可以在應(yīng)用圖標(biāo)右上角加入角標(biāo)的提示。

目前大部分的安卓系統(tǒng)并不支持設(shè)置應(yīng)用角標(biāo),僅部分定制的系統(tǒng)支持。為了節(jié)省開發(fā)成本,可使用github的開源庫https://github.com/leolin310148/ShortcutBadger 。ShortcutBadger支持的手機類型如下:

支持機型列表

具體使用方法參考github文檔,主要的語句如下:

1. Add mavenCentral to your build script.

    repositories {
        mavenCentral()
    }

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

    dependencies {
        compile "me.leolin:ShortcutBadger:1.1.16@aar"
    }

3. Add the codes below:

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

4. 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

MIUI系統(tǒng)的調(diào)用方法

ShortcutBadger庫中,對于小米手機(MIUI6及以上)不能采用上述的方法設(shè)置角標(biāo),需要采用以下方案:

//注意,需要在調(diào)用NotificationManger.notify方法之前,調(diào)用更新角標(biāo)的方法
ShortcutBadger.applyNotification(getApplicationContext(), notification, badgeCount);

MIUI系統(tǒng)角標(biāo)原理

MIUI6以后重新設(shè)計了桌面app角標(biāo)的顯示,分為以下兩種情況:

1)默認情況
當(dāng)app 向通知欄發(fā)送了一條通知 (通知不帶進度條并且用戶可以刪除的),那么桌面app icon角標(biāo)就會顯示1. 此時app顯示的角標(biāo)數(shù)是和通知欄里app發(fā)送的通知對應(yīng)的,即向通知欄發(fā)送了多少通知就會顯示多少角標(biāo)。
eg:如下圖,通知欄有兩條通知消息,則app角標(biāo)顯示為2。如果將第一條通知滑動刪除,則app角標(biāo)顯為2-1=1;

推送測試

備注:不同的通知notifyId不同

2)通知自定義角標(biāo)
小米提供了一種方法供用戶自定義角標(biāo)數(shù)目。如上面的示例,通知欄里雖然只有兩條通知,但第一條通知的角標(biāo)(messageCount)可設(shè)為21,第二條通知的角標(biāo)可設(shè)為3,這樣app的角標(biāo)則為21+3=24條。如果用戶手動刪除第一條通知,則app角標(biāo)顯示變?yōu)?4-21=3條。

Notification.extraNotification內(nèi)容

原理是通過反射拿到 Notification 的私有屬性 extraNotification ,重點就是這個 extraNotification ,這個類里面有個私有屬性 messageCount ,我們只要改變這個 messageCount 值就能改變app的角標(biāo)。注意,這個值設(shè)置為該條通知對應(yīng)的未讀信息個數(shù),對上圖的第一條通知而言,該值就是21。

反射的具體代碼如下:

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

具體參考小米官網(wǎng)文檔:https://dev.mi.com/doc/p=3904/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,366評論 25 708
  • 什么是應(yīng)用角標(biāo)? 應(yīng)用角標(biāo)最開始是在ios系統(tǒng)中出現(xiàn)的,大概長這樣: 如何支持應(yīng)用角標(biāo)? 安卓應(yīng)用的角標(biāo)是由Lau...
    wzystal閱讀 22,062評論 10 55
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點贊按鈕進度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 47,188評論 22 665
  • 上到大學(xué)了才發(fā)現(xiàn)自己其實 最適合上幼兒園ヾ(@^^@)ノ
    啊小笨狗閱讀 201評論 1 4
  • (1) 記得幾前年看電視訪談節(jié)目,最喜歡的一位女演員嫁人了,當(dāng)主持人問她,為什么會選擇某人做她的老公時,她一臉幸福...
    代連華閱讀 2,496評論 0 1

友情鏈接更多精彩內(nèi)容