アプリの一覧を取得する
端末にインストールされているアプリの一覧を取得したいときは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を調べます。
例えばプリインストール済みかどうかを判別するコードは次のようになります。
List appInfoList = 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