29
28

More than 5 years have passed since last update.

Androidでアプリアイコンにバッジが付けれる?getUserBadgedIconについて調べてみた

Posted at

API Level 21からPackageManager#getUserBadgedIconというメソッドが追加されました
http://developer.android.com/reference/android/content/pm/PackageManager.html#getUserBadgedIcon(android.graphics.drawable.Drawable,android.os.UserHandle

結論から言うと現在は特定の条件で固定のバッジを表示するのみのようです。

実装は
https://github.com/android/platform_frameworks_base/blob/a6ed1b9547dcd592031a415739cc7e672c068f7c/core/java/android/app/ApplicationPackageManager.java#L881 より

    @Override
    public Drawable getUserBadgedIcon(Drawable icon, UserHandle user) {
        final int badgeResId = getBadgeResIdForUser(user.getIdentifier());
        if (badgeResId == 0) {
            return icon;
        }
        Drawable badgeIcon = getDrawable("system", badgeResId, null);
        return getBadgedDrawable(icon, badgeIcon, null, true);
    }

のようになっていて、getBadgeResIdForUserでリソースIDを取得して、Drawableを取得して返していて、
getBadgeResIdForUserでは以下のように固定のバッジ画像のリソースIDを返しているため、投稿した時点では固定のバッジをつけるのみのようです。

    private int getBadgeResIdForUser(int userHandle) {
        // Return the framework-provided badge.
        UserInfo userInfo = getUserIfProfile(userHandle);
        if (userInfo != null && userInfo.isManagedProfile()) {
            return com.android.internal.R.drawable.ic_corp_icon_badge;
        }
        return 0;
    }

isManagedProfileについてはこちらの記事に書かれているようです。企業や学校などで管理されたプロファイルを利用するようです。
Android 5.0 API概要
http://firespeed.org/diary.php?diary=kenz-1784

標準のLauncherアプリではないですが、Launcherアプリが対応していれば、Broadcastを投げてバッジを付ける方法もあるようで、Lineアプリなどは対応しているようです

29
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
28