アプリケーションリストを取得する

インストールしているアプリが多すぎて表示が遅くて困る。

取得コード

参考になりそうなものを集める。

// 起動可能なIntent
Intent intent=new Intent(Intent.ACTION_MAIN,null);
// デスクトップから可能なIntent(つまり通常のアプリケーション)
intent.addCategory(Intent.CATEGORY_LAUNCHER);
// 通常のアプリケーションのリストを取得
PackageManager manager=getPackageManager();
List<ResolveInfo6gt; infoes=manager.queryIntentActivities(intent,0);
TextView textView = (TextView) findViewById(R.id.textView);
for (int i = 0;i < infes.size(); i++) {
  ResolveInfo info=infes.get(i);
  // TextViewにアプリケーション名を出力
  textView.append(info.loadLabel(manager) + "\n");
}

あらかじめインテントにアプリの属性をセット。

    //アプリリストの読み込み
    private void loadAppList() {
        //アアクティビティ情報のリストの取得
        PackageManager manager=getPackageManager();
        Intent intent=new Intent(Intent.ACTION_MAIN,null);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);        
        List<ResolveInfo> apps=manager.queryIntentActivities(intent,0);
        Collections.sort(apps,new ResolveInfo.DisplayNameComparator(manager));

        //アクティビティ情報の取得
        appList=new ArrayList<AppInfo>();
        if (apps==null) return;
        for (int i=0;i<apps.size();i++) {
            AppInfo appInfo=new AppInfo();
            ResolveInfo info=apps.get(i);
            appInfo.title=info.loadLabel(manager);
            appInfo.setActivity(
                info.activityInfo.applicationInfo.packageName,
                info.activityInfo.name);
            appInfo.icon=resizeIcon(info.activityInfo.loadIcon(manager));
            appList.add(appInfo);
        }
        
        //グリッドの更新
        gridView.setAdapter(new GridAdapter(this));
    } 

ブロードキャストレシーバで受けるほうがいいのか?

PackageManager pm = getPackageManager();
List<resolveinfo> resolveInfo = pm.queryIntentActivities(new Intent(Intent.ACTION_SEARCH), PackageManager.MATCH_DEFAULT_ONLY);
StringBuffer sb = new StringBuffer();
for(int i = 0; i < resolveInfo.size(); i++) {
  ResolveInfo info = resolveInfo.get(i);
  ActivityInfo activityinfo = info.activityInfo;
  sb.append(activityinfo.packageName + "\n");
}        
textView.setText(sb.toString());  


PackageManager pm = getPackageManager();
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
List<resolveinfo> resolveInfo = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);

// sort
Collections.sort(resolveInfo, new ResolveInfo.DisplayNameComparator(pm));

ACTION_SEND などは、setType() しないと取得できないらしい。
http://y-anz-m.blogspot.com/2010/03/android-action.html

// アクティビティリスト取得
PackageManager pm = getPackageManager();
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);

//指定されたインテントフラグでアクティビティを検索
List<ResolveInfo> appList= pm.queryIntentActivities(intent, 0);

あとは取得したResolveInfoのプロパティからいろんな情報が取得可能。
loadLabel(pm)で取得→アプリケーションのタイトル
applicationInfo.packageName→パッケージ名
activityInfo.name→アクティビティ名
activityInfo.loadIcon(pm)で取得→icon画像
http://d.hatena.ne.jp/sy-2010/20100202/1265101698

まとめると

まず、アクション種別を指定して、アクティビティかたまりの情報を取得する。
そのあと、アクティビティごとに必要情報を取得。

// パッケージマネージャを利用
PackageManager pm = getPackageManager();

// インテントで取得するアクティビティ種類を指定
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);

// 該当するアクティビティの情報たちを取得
List<ResolveInfo> appsInfo = pm.queryIntentActivities(intent, 0);

// それぞれのアクティビティ内の取得する情報を指定
for(int i = 0; i < appsInfo.size(); i++) {
  ResolveInfo info = appsInfo.get(i);
  ActivityInfo activityinfo = info.activityInfo;

  // アプリ内の取得する情報を取得
  sb.append(activityinfo.packageName + "\n");
} 

Android Debug Bridge をよくみてみる

これってもっといろいろ使えたりするのではないか。と。
"Android Debug Bridge version 1.0.25"

adb devices

接続されているすべてのデバイスを表示。

adb connect :

TCP/IP経由でデバイスに接続。(切断 - disconnect :
テザリング時に使用していた。

adb sync [ ]

変更があればホストからデバイスにコピー。

adb shell - run remote shell command

adb emu - run emulator console command

adb logcat [ ] - View device log

adb install [-l] [-r] - push this package file to the device and install it

('-l' means forward-lock the app)
('-r' means reinstall the app, keeping its data)

adb uninstall [-k] - remove this app package from the device

('-k' means keep the data and cache directories)

adb forward - forward socket connections
forward specs are one of:
tcp:
localabstract:
localreserved:
localfilesystem:
dev:
jdwp: (remote only)
adb jdwp - list PIDs of processes hosting a JDWP transport

adb bugreport - return all information from the device
that should be included in a bug report.

adb help - show this help message

DATAOPTS:
(no option) - don't touch the data partition
-w - wipe the data partition
-d - flash the data partition

scripting:
adb wait-for-device - block until device is online
adb start-server - ensure that there is a server running
adb kill-server - kill the server if it is running
adb get-state - prints: offline | bootloader | device
adb get-serialno - prints:
adb status-window - continuously print device status for a specified device
adb remount - remounts the /system partition on the device read-write
adb reboot [bootloader|recovery] - reboots the device, optionally into the bootloader or recovery program
adb root - restarts the adbd daemon with root permissions
adb usb - restarts the adbd daemon listening on USB adb tcpip - restarts the adbd daemon listening on TCP on the specified port
networking:
adb ppp [parameters] - Run PPP over USB.
Note: you should not automatically start a PPP connection.
refers to the tty for PPP stream. Eg. dev:/dev/omap_csmi_tty1
[parameters] - Eg. defaultroute debug dump local notty usepeerdns

adb sync notes: adb sync [ ]
can be interpreted in several ways:

- If is not specified, both /system and /data partitions will be updated.

- If it is "system" or "data", only the corresponding partition
is updated.
|

-d

 -d                            - directs command to the only connected USB device
                                 returns an error if more than one USB device is present.

-e

 -e                            - directs command to the only running emulator.
                                 returns an error if more than one emulator is running.

-s

 -s <serial number>            - directs command to the USB device or emulator with
                                 the given serial number. Overrides ANDROID_SERIAL
                                 envivornment variable.

-p

 -p <product name or path>     - simple product name like 'sooner', or
                                 a relative/absolute path to a product
                                 out directory like 'out/target/product/sooner'.
                                 If -p is not specified, the ANDROID_PRODUCT_OUT
                                 environment variable is used, which must
                                 be an absolute path.