Androidで実行中のアプリケーションを取得する-----ActivityManager.RunningApProcessiInfo類の詳細
転載は出典を明記してください.http://blog.csdn.net/qinjuning
今日は引き続きActivityManagerの使用について説明します.前節の勉強を通して、ActivityManagerを利用してシステムを取得する方法を学びました.
実行中のプロセス.本論文で説明する知識点は、これらのプロセス情報を利用して、システムで実行されているアプリケーションと各プロセスで実行されているアプリケーションを取得することです.
使う知識ポイントには、Package Managerの使用も含まれています.読者は私の前に書いたブログ「Package Managerの使用」を読みます.
すべてのアプリケーションは独立したプロセスで実行されますが、リソースを節約するために、またはこれらのアプリケーションは、ある共同作業を完了するために実行されます.
プロセスで実行されるかもしれません.
知識点の紹介:
ActivityManager.RunningApProcessiInfo類
説明:実行中のプロセス情報をカプセル化しました.
通常のフィールド:
要点 pid プロセスID
要点 uid プロセスがあるユーザID
String processNameプロセス名は、デフォルトではパケット名またはandroid:process="属性で指定されています.
String[] pkgList このプロセスで実行されるすべてのアプリケーションのパッケージ名
ActivityManager.RunningApProcessiInfoの詳細については、
Package Manger類
説明:アプリケーション情報の操作をカプセル化しました.
アプリケーション情報を取得する方法は以下の通りです.
public abstract Apple Info getApple Info(String) package Name,int flags)
パラメータ:package nameパッケージ名
flags このアプリInfoはこのフラグです.通常は定数0を直接付与すればいいです.
機能:Apple Infoオブジェクトを返す
Package Mangerの詳細については、
デモ説明:
私たちはActivityManagerを利用して、実行中のプロセス情報をすべて取得しました.つまり、各プロセスで実行中のアプリケーションパッケージ名を取得しました.
これらのパッケージ名から、Package Manager類が提供するメソッドを直接呼び出して、これらのアプリケーションの情報を取得することができます.
いくつかの資源ファイルは貼らないで、直接主な工事のロジックを貼り付けました.ここで注意したいのですが、私達は一回ですべてのアプリケーション情報を取得しました.
アプリケーションはフィルタリングを行い、私たちが必要なオブジェクトを得る.読者はPackage Manager類が提供する方法を使って、全パッケージ名を巡回して、
しかし、このほうが効率が低いです.
スクリーンショットは以下の通りです
プロセスをクリックした後 あるプロセスが実行するアプリケーションの情報を表示します. 実行中のプロセス情報:
アプリケーションを実行していると表示されるプロジェクトコードは以下の通りです.
package com.qin.ammp;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
public class BrowseRunningAppActivity extends Activity {
private static String TAG = "BrowseRunningAppActivity";
private ListView listview = null;
private List<RunningAppInfo> mlistAppInfo = null;
private TextView tvInfo = null ;
private PackageManager pm;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.browse_app_list);
listview = (ListView) findViewById(R.id.listviewApp);
tvInfo = (TextView)findViewById(R.id.tvInfo) ;
mlistAppInfo = new ArrayList<RunningAppInfo>();
//
Intent intent = getIntent();
// pid
int pid = intent.getIntExtra("EXTRA_PROCESS_ID", -1);
if ( pid != -1) {
//
mlistAppInfo =querySpecailPIDRunningAppInfo(intent, pid);
}
else{
// : id
tvInfo.setText(" -------");
mlistAppInfo = queryAllRunningAppInfo();
}
BrowseRunningAppAdapter browseAppAdapter = new BrowseRunningAppAdapter(this, mlistAppInfo);
listview.setAdapter(browseAppAdapter);
}
// : id
// , pkgname
private List<RunningAppInfo> queryAllRunningAppInfo() {
pm = this.getPackageManager();
//
List<ApplicationInfo> listAppcations = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);
Collections.sort(listAppcations,new ApplicationInfo.DisplayNameComparator(pm));//
//
Map<String, ActivityManager.RunningAppProcessInfo> pgkProcessAppMap = new HashMap<String, ActivityManager.RunningAppProcessInfo>();
ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
// ActivityManager getRunningAppProcesses()
List<ActivityManager.RunningAppProcessInfo> appProcessList = mActivityManager
.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo appProcess : appProcessList) {
int pid = appProcess.pid; // pid
String processName = appProcess.processName; //
Log.i(TAG, "processName: " + processName + " pid: " + pid);
String[] pkgNameList = appProcess.pkgList; //
//
for (int i = 0; i < pkgNameList.length; i++) {
String pkgName = pkgNameList[i];
Log.i(TAG, "packageName " + pkgName + " at index " + i+ " in process " + pid);
// map
pgkProcessAppMap.put(pkgName, appProcess);
}
}
//
List<RunningAppInfo> runningAppInfos = new ArrayList<RunningAppInfo>(); // AppInfo
for (ApplicationInfo app : listAppcations) {
// RunningAppInfo
if (pgkProcessAppMap.containsKey(app.packageName)) {
// packageName pid processName
int pid = pgkProcessAppMap.get(app.packageName).pid;
String processName = pgkProcessAppMap.get(app.packageName).processName;
runningAppInfos.add(getAppInfo(app, pid, processName));
}
}
return runningAppInfos;
}
//
private List<RunningAppInfo> querySpecailPIDRunningAppInfo(Intent intent , int pid) {
String[] pkgNameList = intent.getStringArrayExtra("EXTRA_PKGNAMELIST");
String processName = intent.getStringExtra("EXTRA_PROCESS_NAME");
//update ui
tvInfo.setText(" id "+pid +" : "+pkgNameList.length);
pm = this.getPackageManager();
//
List<RunningAppInfo> runningAppInfos = new ArrayList<RunningAppInfo>(); // AppInfo
for(int i = 0 ; i<pkgNameList.length ;i++){
// ApplicationInfo
ApplicationInfo appInfo;
try {
appInfo = pm.getApplicationInfo(pkgNameList[i], 0);
runningAppInfos.add(getAppInfo(appInfo, pid, processName));
}
catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 0 ;
}
return runningAppInfos ;
}
// RunningAppInfo ,
private RunningAppInfo getAppInfo(ApplicationInfo app, int pid, String processName) {
RunningAppInfo appInfo = new RunningAppInfo();
appInfo.setAppLabel((String) app.loadLabel(pm));
appInfo.setAppIcon(app.loadIcon(pm));
appInfo.setPkgName(app.packageName);
appInfo.setPid(pid);
appInfo.setProcessName(processName);
return appInfo;
}
}
このセクションの紹介を通して、AndroidシステムのSettingsモジュールは基本的にアプリケーションの機能を完成しました.でも、主軸線はもう計画されていますので、みなさんもよく味わってください.
コードのダウンロード先:http://download.csdn.net/detail/qinjuning/3839045