約一年ぶりの更新になってしまいました。
今回はAndroidでのバッジ表示について触る機会があったので、その時に調査した内容について記述していきます。

先日iPhone 5sからXperia Z5に乗り換えた後輩からLINEのバッジ表示が無くなって不便だという相談をされたので、何かできないかと調べてみたところ、Galaxy S2などのGalaxyシリーズではLINEのバッジ表示が有効になっていたことから、今回の調査を始めました。


Xperia標準ホームでのバッジ表示 Xperia標準ホームでのバッジ表示

画像のようにアイコンの右上などに未読件数などの通知を行う用途で用いられるバッジですが、iOSではOSの標準機能として実装されているのに対してAndroidではホーム画面プリの実装に依存しているため、Androidにおいてはアプリとホーム画面アプリの組み合わせによっては一部のアプリではバッジが表示される、または一切バッジが表示されないといった状況が起きています。

バッジ表示に対応しているホーム画面は、基本的にはブロードキャストインテントを利用してバッジ表示の更新を行っています。一方、SumsungのTouchWizやTeslacoil SoftwareのNova LauncherはContentProviderを介した手法となっています。このように、各ホーム画面ごとにバッジ表示の手法や必要な権限が異なっていたり、手法が同じでもインテントのアクション名やエクストラキーが異なっていたりするため、各ホーム画面ごとにバッジ表示部分を実装する必要があるのですが、ShortcutBadgerのようなライブラリを利用することでその手間を省いて統一的に扱うことができます。

ただ、ShortcutBadgerは海外発のプロジェクトのため、国内端末のホーム画面には対応していません。例えば、docomoから販売されている端末に搭載されているdocomo LIVE UXです。docomo LIVE UXもバッジ表示機能はあるのですが、バッジ表示権限がdocomoによる署名がなされたアプリケーション以外からは利用できないため、そもそもサードパーティーのアプリからはバッジ表示が利用できません。このあたりの制限を緩和してもらえるとありがたいのですが。


ここで冒頭の話題に戻りますが、後輩から相談されたので調査した内容をもとにその場でLINEなどのバッジ表示を有効にするアプリを作りました。現状ではXperia限定ですが、このアプリをインストールすることでLINEのバッジ表示要求をXperiaホームが受け取ることのできる形式に変換して再発行するのでバッジ表示が行われるようになります。インテントを再変換して流しなおすだけのアプリのため、設定画面などはありません。そのためホーム画面などからアイコンをタップしても何も起こりませんが仕様です。
BadgeRpeater.apk
なお、このアプリのインストール、利用については自己責任でお願いします。不正なコードやウイルスの混入が無いようチェックはしていますが、万全を保証するものではないので、必要であれば自身で追加でチェックすることをお勧めします。