步骤
- 获得上下文Context,调用getPackageManager()获得PackageManager实例
- PackageManager实例,调用getInstalledPackages(int flag)并传入flag值获得相应已安装包信息PackageInfo列表
示例代码:
package dyingbleed.iteye;
import java.util.ArrayList;
import java.util.List;
import android.app.ListActivity;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class Main extends ListActivity {
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
int what = msg.what;
switch(what) {
case 0 :
List<APP> data = (List<APP>) msg.obj;
setListAdapter(new APPListViewAdapter(Main.this, data));
break;
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new Thread(new InstalledAPPTask()).start();
}
private class APPListViewAdapter extends BaseAdapter {
private Context context;
private List<APP> data;
public APPListViewAdapter(Context context, List<APP> data) {
this.context = context;
this.data = data;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.item, null);
}
ImageView icon = (ImageView) convertView.findViewById(R.id.item_IconImageView);
TextView name = (TextView) convertView.findViewById(R.id.item_NameTextView);
TextView packageName = (TextView) convertView.findViewById(R.id.item_PackageNameTextView);
TextView versionName = (TextView) convertView.findViewById(R.id.item_VersionNameTextView);
icon.setImageDrawable(data.get(position).getIcon());
name.setText(data.get(position).getName());
packageName.setText(data.get(position).getPackageName());
versionName.setText(data.get(position).getVersionName());
return convertView;
}
}
private class InstalledAPPTask implements Runnable {
@Override
public void run() {
List<APP> appList = achieveAPPList();
handler.sendMessage(handler.obtainMessage(0, appList));
}
private List<APP> achieveAPPList() {
List<APP> result = new ArrayList<APP>();
List<PackageInfo> packageInfoList = getPackageManager().getInstalledPackages(0); //返回已安装的包信息列表
for(PackageInfo packageInfo : packageInfoList) {
/*
* 判断是否为非系统应用
* */
if((packageInfo.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM) == 0) {
APP app = new APP();
app.setIcon(packageInfo.applicationInfo.loadIcon(getPackageManager()));
app.setName(packageInfo.applicationInfo.loadLabel(getPackageManager()).toString());
app.setPackageName(packageInfo.packageName);
app.setVersionName(packageInfo.versionName);
result.add(app);
}
}
return result;
}
}
private class APP {
private String name; //应用名
private String packageName; //包名
private String versionName; //版本名
private Drawable icon; //应用图标
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPackageName() {
return packageName;
}
public void setPackageName(String packageName) {
this.packageName = packageName;
}
public String getVersionName() {
return versionName;
}
public void setVersionName(String versionName) {
this.versionName = versionName;
}
public Drawable getIcon() {
return icon;
}
public void setIcon(Drawable icon) {
this.icon = icon;
}
}
}
运行结果: