【Android】获得已安装应用
步骤
- 获得上下文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() {@Overridepublic 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; }@Overridepublic int getCount() {return data.size();}@Overridepublic Object getItem(int position) {return data.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic 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 { @Overridepublic 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; } }}?
运行结果:
?