アプリケーションリストを取得する
インストールしているアプリが多すぎて表示が遅くて困る。
取得コード
参考になりそうなものを集める。
// 起動可能な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 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 specs are one of:
tcp:
localabstract:
localreserved:
localfilesystem:
dev:
jdwp:
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
networking:
adb ppp
Note: you should not automatically start a PPP connection.
[parameters] - Eg. defaultroute debug dump local notty usepeerdns
adb sync notes: adb sync [
- If
- 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.