Android上的Badge,快速實現給應用添加角標

應用角標是iOS的一個特點,原生Android並不支持。或許是由於當時iOS的通知欄比較雞肋(固然如今已經改進了不少),而Android的通知欄功能強大?因此纔出現了一方依賴於數字角標,一方堅持強大的通知欄,在平常使用中這兩種交互方式都各有特點,沒什麼違和感。可是啊,總有人想搞些大新聞:html

當收到推送而應用沒有未讀角標時:
安卓---什麼爛手機!安卓就是不行!
蘋果---我靠,這應用居然連角標都不支持!刪掉。
android

 

因此啊,衆多手機廠商的定製系統或者Launcher都效仿iOS自定義了該功能。若是嫌適配麻煩,能夠看看Github上的兩個項目:git

https://github.com/leolin310148/ShortcutBadgergithub

https://github.com/xuyisheng/ShortcutHelperspa

 

我嘗試了ShortcutBadger(1.1.13):3d

 

使用下來,在華爲、三星、小米、索尼、APEX上實測成功。可是發現了兩個問題:調試

 一、有些設備可能會拋出異常,致使設置失敗。實測在Samsung Galaxy Note3(Android5.0)上就是如此,發現異常是在這裏拋出的htm

這裏顯示角標是經過發送廣播實現,而canResolveBroadcast方法是檢查是否存在該廣播對應的接收器,不知爲什麼有些設備會找不到。blog

因此我down了一份代碼,直接改了canResolveBroadcast方法,而後手動把aar包導入到項目中使用了文檔

 

二、小米比較特別,他的角標數量直接由通知欄數量決定。用以上方法處理時,通知欄會同時出現一條空的通知。因此小米的角標我作了單獨處理

在收到推送消息建立通知時,經過反射把角標數量設置進通知中,這也是官方文檔中的作法。

值得注意的一點是,若是你的通知有好幾類,好比:有郵件的、有新動態的等,郵件的通知是一封郵件對應一個通知,而新動態是摺疊在一塊兒的(你有xx條新動態未讀),甚至還有其餘不是透傳形式的推送通知的。我原覺得在設置角標的時候要手動計算出當前全部通知的數量,但通過驗證,咱們只須要關心當前收到的這條消息,若是是摺疊的就要用上述方法手動設置數量,其餘的並不須要處理,一條通知對應的角標數量默認就是一,同時MIUI會自動計算通知數的總和去更新角標。

 

三、在榮耀9上調試demo,發現一直無效,提示權限問題,可是權限是的確申請了的。

無心發現申請了 <uses-permission android:name="android.permission.INTERNET" /> 以後就解決了。

 

最後,若是你是針對某個系統或Launcher單獨寫時,能夠直接搜索各家的適配方法,但無論是哪一種。。千萬別忘了在AndroidManifest中有沒有添加相應的Badge權限啊~

 

閱讀原文

相關文章
相關標籤/搜索