步骤
- 获得上下文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; } }}?运行结果:
?
