アプリの一覧を取得する
端末にインストールされているアプリの一覧を取得したいときはPackageManagerというクラスを使います。
例えばアプリ名とそのパッケージ名を全てのアプリで調べたい場合は次のようなコードを書きます。
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); PackageManager pm = getActivity().getPackageManager(); List<ApplicationInfo> appInfoList = pm.getInstalledApplications(PackageManager.GET_META_DATA); for(ApplicationInfo appInfo : appInfoList){ Log.i("MainActivity", "ラベル = " + pm.getApplicationLabel(appInfo)); Log.i("MainActivity", "パッケージ名 = " + appInfo.packageName); } } }
getInstallApplicationsメソッドを使うことですでにインストール済みのアプリ情報をApplicationInfo型のリストで取り出すことができます。
このアプリを実行したときのログの一部は次のようになりました。
02-03 05:16:12.121: ラベル = Sound Recorder 02-03 05:16:12.121: パッケージ名 = com.android.soundrecorder 02-03 05:16:12.121: ラベル = Launcher 02-03 05:16:12.121: パッケージ名 = com.android.launcher 02-03 05:16:12.121: ラベル = Search 02-03 05:16:12.121: パッケージ名 = com.android.quicksearchbox
ここでのラベルとはアプリの名前のことです。
アプリの種類を識別する
例えばプリインストールされたアプリとそうでないアプリを分けたい場合はApplicationInfoのflagsを調べます。
例えばプリインストール済みかどうかを判別するコードは次のようになります。
ListappInfoList = pk.getInstalledApplications(PackageManager.GET_META_DATA); for(ApplicationInfo appInfo : appInfoList){ String packageName = appInfo.packageName; Log.i("MainActivity", "パッケージ名 = " + packageName); //プリインストールされたアプリか判別する。 if((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == ApplicationInfo.FLAG_SYSTEM){ Log.i("MainActivity", "これはプリインストール済みのアプリです。"); } }
プリインストールを表すフラグFLAG_SYSTEMがflagsの中に含まれているかどうかを判別しています。判別に使える主なフラグには次のものがあります。
フラグ | 意味 |
---|---|
FLAG_DEBUGGABLE | デバッグを許可しているアプリ |
FLAG_SYSTEM | システムにプリインストールされたアプリ |
FLAG_RESIZEABLE_FOR_SCREENS | 画面の大きさに合わせて大きさが変わるアプリ(APIレベル4以上) |
FLAG_SUPPORTS_SCREEN_DENSITIES | 異なる画面密度に対応しているアプリ(APIレベル4以上) |
FLAG_UPDATED_SYSTEM_APP | プリインストールされているアプリの中でアップデートされたアプリ(APIレベル4以上) |
そのほかのフラグについてはApplicationFlagの定数を参照してください。
© Kaz