package com.imooc.systemtest; import android.app.Activity; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.os.Bundle; import android.view.View; import android.widget.ListView; import java.util.ArrayList; import java.util.List; public class PMTest extends Activity { public static final int ALL_APP = 0; public static final int SYSTEM_APP = 1; public static final int THIRD_APP = 2; public static final int SDCARD_APP = 3; private ListView mListView; private PackageManager pm; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.pm_main); mListView = (ListView) findViewById(R.id.listView_pm); } private List<PMAppInfo> getAppInfo(int flag) { // 获取PackageManager对象 pm = this.getPackageManager(); // 获取应用信息 List<ApplicationInfo> listAppcations = pm .getInstalledApplications( PackageManager.GET_UNINSTALLED_PACKAGES); List<PMAppInfo> appInfos = new ArrayList<PMAppInfo>(); // 判断应用类型 switch (flag) { case ALL_APP: appInfos.clear(); for (ApplicationInfo app : listAppcations) { appInfos.add(makeAppInfo(app)); } break; case SYSTEM_APP: appInfos.clear(); for (ApplicationInfo app : listAppcations) { if ((app.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { appInfos.add(makeAppInfo(app)); } } break; case THIRD_APP: appInfos.clear(); for (ApplicationInfo app : listAppcations) { if ((app.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) { appInfos.add(makeAppInfo(app)); } else if ((app.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) { appInfos.add(makeAppInfo(app)); } } break; case SDCARD_APP: appInfos.clear(); for (ApplicationInfo app : listAppcations) { if ((app.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) { appInfos.add(makeAppInfo(app)); } } break; default: return null; } return appInfos; } private PMAppInfo makeAppInfo(ApplicationInfo app) { PMAppInfo appInfo = new PMAppInfo(); appInfo.setAppLabel((String) app.loadLabel(pm)); appInfo.setAppIcon(app.loadIcon(pm)); appInfo.setPkgName(app.packageName); return appInfo; } public void setListData(int flag) { PMAdapter adapter = new PMAdapter(this, getAppInfo(flag)); mListView.setAdapter(adapter); } public void btnAllApp(View view) { setListData(ALL_APP); } public void btnSystemApp(View view) { setListData(SYSTEM_APP); } public void btn3rdApp(View view) { setListData(THIRD_APP); } public void btnSdcardApp(View view) { setListData(SDCARD_APP); } }