Android上的Badge,給應用新增角標

2021-07-27 17:59:53 字數 1395 閱讀 8286

應用角標是ios的乙個特色,原生android並不支援。或許是因為當時ios的通知欄比較雞肋(當然現在已經改進了很多),而android的通知欄功能強大?所以才出現了一方依賴於數字角標,一方堅持強大的通知欄,在日常使用中這兩種互動方式都各有特色,沒什麼違和感。但是啊,總有人想搞些大新聞:

當收到推送而應用沒有未讀角標時:

安卓---什麼爛手機!安卓就是不行!

蘋果---我靠,這應用竟然連角標都不支援!刪掉。

所以啊,眾多手機廠商的定製系統或者launcher都效仿ios自定義了該功能。如果嫌適配麻煩,可以看看github上的兩個專案:

我嘗試了shortcutbadger(1.1.13):

使用下來,在華為、三星、小公尺、索尼、apex上實測成功。但是發現了兩個問題:

1、有些裝置可能會丟擲異常,導致設定失敗。實測在samsung galaxy note3(android5.0)上就是如此,發現異常是在這裡丟擲的

這裡顯示角標是通過傳送廣播實現,而canresolvebroadcast方法是檢查是否存在該廣播對應的接收器,不知為何有些裝置會找不到。

所以我down了乙份**,直接改了canresolvebroadcast方法,然後手動把aar包匯入到專案中使用了

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

在收到推送訊息建立通知時,通過反射把角標數量設定進通知中,這也是官方文件中的做法。

值得注意的一點是,如果你的通知有好幾類,比如:有郵件的、有新動態的等,郵件的通知是一封郵件對應乙個通知,而新動態是摺疊在一起的(你有xx條新動態未讀),甚至還有其他不是透傳形式的推送通知的。

我原以為在設定角標的時候要手動計算出當前所有通知的數量,但經過驗證,我們只需要關心當前收到的這條訊息,如果是摺疊的就要用上述方法手動設定數量,其他的並不需要處理,一條通知對應的角標數量預設就是一,同時miui會自動計算通知數的總和去更新角標。

最後,如果你是針對某個系統或launcher單獨寫時,可以直接搜尋各家的適配方法,但不管是哪種。。千萬別忘了在androidmanifest中有沒有新增相應的badge許可權啊~

閱讀原文

Mac上給android模擬器安裝apk步驟

開啟android模擬器 如果輸入adb 顯示 command not found 是因為沒有配置環境變數 配置環境變數方法 開啟終端 輸入 open bash profile 可以開啟配置檔案,但不能修改。原因是不是root使用者。我在網上看到乙個啟動root使用者的帖子 但是試了之後沒有用 也許...

為你的TabBar新增Badge 感謝分享

實現過程 首先定義了三種badge型別 typedef ns enum nsuinteger,custombadgetype 然後提供了乙個最主要的api,設定badge void setbadgestyle custombadgetype type value nsinteger badgeval...

Android裝置上的OTG

關於驅動 otg驅動在核心配置好 usb host 控制器的時候就已經支援 otg了。如果硬體上不支援otg 那麼就沒有辦法識別插入到 usb guest 口上的裝置。待測試 關於應用 otg對於應用程式來說是和普通的 usb host 口是一樣樣的。所以開發應用程式完全不用管是插入 host 口的...