[覚書]Androidでインストールされたパッケージ&アプリケーションを列挙する
パッケージマネージャーをからインストールされたパッケージと関連するアプリケーションの一覧を取得して、アクティビティに貼り付けたリストビューに二段表示するサンプルコードです。とてもシンプルです。
開発環境:Eclipse 4.4 Luna Pleiades All in One for Java 64 bit Standard Edition, ADT, Android 仮想デバイス(Intel Atom (x86)) 最小必須 SDK:API 15: Android 4.0.3 (IceCream Sandwich) ターゲット SDK:API 15: Android 4.0.3 (IceCream Sandwich) コンパイル SDK:API 15: Android 4.0.3 (IceCream Sandwich)
サンプルコード
package com.example.app; import java.util.ArrayList; import java.util.HashMap; import android.app.Activity; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Bundle; import android.widget.ListView; import android.widget.SimpleAdapter; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // アプリケーション情報を取得する PackageManager pm = getPackageManager(); ArrayList<HashMap<String, String>> items = new ArrayList<HashMap<String, String>>(); for (PackageInfo info : pm.getInstalledPackages(PackageManager.GET_META_DATA)) { HashMap<String, String> item = new HashMap<String, String>(); item.put("PackageName", info.packageName); item.put("ApplicationName", info.applicationInfo.loadLabel(pm).toString()); items.add(item); } // リストビューにさっきの情報を持つアダプターを設定する SimpleAdapter adapter = new SimpleAdapter( this, items, android.R.layout.simple_list_item_2, new String[] {"ApplicationName", "PackageName"}, new int[] {android.R.id.text1, android.R.id.text2}); ListView listView1 = new ListView(this); listView1.setAdapter(adapter); setContentView(listView1); } }
覚書
PackageManagerはActivity(Context)から取得する
パッケージマネージャーはグローバルな関数・変数でなく、Activityが継承しているContextのContext::getPackageManager()で取得します。
PakageManager pm = getPackageManager(); // Activity内部で!
ここで取得したPakageManagerからgetInstalledApplications()等で各種情報を取得することができます。メソッドによってはIntentの種類を指定して列挙することもできます。
他にもgetSystemServices()等がContextから提供されています。
ListViewとSimpleAdapter
WindowsのListBox/ListViewに対応するコントロール(ビュー)としてAndroid アプリケーションではListViewが使われるそうです。ListBox/ListViewでは直に項目を追加するかオーナードローを行いましたが、AndroidではSimpleAdapter等のAdapterがその役割を担うそうです。
サンプルではSimpleAdapterを利用してリストビューを二段表示しています。SimpleAdapterは作成時にList<Map<String, ?>>を第二引数へ取り、第三引数はレイアウトで用いるXMLのID、第四引数は表示したい項目のMap内でのKeyの配列、第五引数はKeyに関連付けるレイアウト内部のIDの配列です。
蛇足
AtivityにListViewだけ表示するのであればListActivityを使用した方がきれいにまとまります。今回はビューの配置も兼ねてActivityを用いました。