型とか分かりやすくするために大体は関数で書いているが、あくまで紹介のためなので使うときは適当に変えるようにする。
インストール済みの全アプリ情報
val apps = context.packageManager.getInstalledApplications(0)
PackageManager#getInstalledApplications | Android デベロッパー | Android Developers
パッケージ名を指定してアプリ情報を取得
第二引数のフラグにPackageManager.MATCH_UNINSTALLED_PACKAGES
が指定されている場合、指定されたパッケージがインストールされていなかったら「過去にインストールされていたが削除済みで、かつデータが残っている」アプリも探す。
それでも見つからなかったらPackageManager.NameNotFoundException
が送出される。
fun applicationInfo(packageName: String) : ApplicationInfo? =
try {
context.packageManager.getApplicationInfo(packageName, 0)
}
catch (e: PackageManager.NameNotFoundException) {
null
}
PackageManager#getApplicationInfo | Android デベロッパー | Android Developers
アプリの表示名を取得
たとえば
Satena
の場合、パッケージ名はcom.suihan74.satena
でランチャーなどに表示される表示名はSatena
である。
ApplicationInfo
自体には表示名は格納されていない。
以下のようにして手動で取得する。
fun displayName(appInfo: ApplicationInfo) : CharSequense =
context.packageManager.getApplicationLabel(appInfo)
または
fun displayName(appInfo: ApplicationInfo) : CharSequense =
appInfo.loadLabel(context.packageManager)
表示名の取得に失敗した場合は、name
(多分AndroidManifest.xmlに記述された<application>
タグの属性android:name
の内容)が返される。
PackageManager#getApplicationLabel | Android デベロッパー | Android Developers
PackageItemInfo#loadLabel | Android デベロッパー | Android Developers
PackageItemInfo#name | Android デベロッパー | Android Developers
アプリアイコンをロードする
fun loadAppIcon(appInfo: ApplicationInfo) : Drawable =
context.packageManager.getApplicationIcon(appInfo)
または
fun loadAppIcon(appInfo: ApplicationInfo) : Drawable =
appInfo.loadIcon(context.packageManager)
アプリアイコンのロードに失敗した場合はデフォルトアイコンが返される。
PackageManager#getApplicationIcon
を使う場合、引数はApplicationInfo
だけではなくパッケージ名の文字列でも可能。ただし先述した表示名の取得にはApplicationInfo
が必要なので、大抵の場合どちらにしろApplicationInfo
は必要になると思われる。
PackageManager#getApplicationIcon | Android デベロッパー | Android Developers
PackageItemInfo#loadIcon | Android デベロッパー | Android Developers
ロゴ、バナーなどもあるようだが同様なので割愛。
アプリ情報の種類を調べる
「ApplicationInfo
が指すアプリがシステムアプリかどうか」などのフラグを読んで、それがどんな種類のアプリの情報なのかを調べることができる。
FLAG_DEBUGGABLE
… デバッグできるFLAG_SYSTEM
… システムにプリインストールされたアプリFLAG_UPDATED_SYSTEM_APP
… アップデートされたプリインストールアプリFLAG_INSTALLED
… 現在のユーザーが利用できる
など。他にも大きい(or小さい)画面で使用できるか、など色々フラグがあるっぽい。
参考
ApplicationInfo | Android デベロッパー | Android Developers
アプリを起動するためのインテントを取得する
外からアクティビティを直接起動できないアプリの場合null
が返る。
fun getLaunchIntent(appInfo: ApplicationInfo) : Intent? =
context.packageManager.getLaunchIntentForPackage(appInfo.packageName)
アプリ情報取得時の追加オプション
とくに指定しない0
の他、PackageManager.GET_~~
を指定すれば該当する追加情報を付加して取得でき、PackageManager.MATCH_~~
を指定すれば特殊な条件に合致するものを取得できる。
PackageManager#getInstalledApplications
に渡せるフラグ
PackageManager#getInstalledApplications | Android デベロッパー | Android Developers
PackageManager#getApplicationInfo
に渡せるフラグ
PackageManager#getApplicationInfo | Android デベロッパー | Android Developers