小练习/getPackageManager
PMAppInfo
public class PMAppInfo { private String appLabel; private Drawable appIcon; private String pkgName; public PMAppInfo() { } public String getAppLabel() { return appLabel; } public void setAppLabel(String appName) { this.appLabel = appName; } public Drawable getAppIcon() { return appIcon; } public void setAppIcon(Drawable appIcon) { this.appIcon = appIcon; } public String getPkgName() { return pkgName; } public void setPkgName(String pkgName) { this.pkgName = pkgName; } }
PmAdapter
public class PmAdapter extends BaseAdapter { private List<PMAppInfo> PmBean; private LayoutInflater layoutInflater; public PmAdapter(Context context,List<PMAppInfo> pmAppInfos){ PmBean=pmAppInfos; layoutInflater= (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { return PmBean.size(); } @Override public Object getItem(int position) { return PmBean.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder=new ViewHolder(); if (convertView==null){ convertView=layoutInflater.inflate(R.layout.pm_item,null); holder.appIcon =convertView.findViewById(R.id.imageView_icon); holder.appLabel =convertView.findViewById(R.id.textView_label); holder.appPackage = convertView.findViewById(R.id.textView_package); convertView.setTag(holder); }else { holder= (ViewHolder) convertView.getTag(); } PMAppInfo pmAppInfo=PmBean.get(position); holder.appIcon.setImageDrawable(pmAppInfo.getAppIcon()); holder.appLabel.setText(pmAppInfo.getAppLabel()); holder.appPackage.setText(pmAppInfo.getPkgName()); return convertView; } class ViewHolder { ImageView appIcon; TextView appLabel; TextView appPackage; } }
MainAc
import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.os.Build; import android.support.annotation.RequiresApi; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; import java.util.List; @RequiresApi(api = Build.VERSION_CODES.N) public class MainActivity extends AppCompatActivity { String toast; private PackageManager pm; 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; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mListView=findViewById(R.id.listView_pm); } private List<PMAppInfo> getAppInfo(int flag){ //获取PackagesManager对象 pm=getPackageManager(); //获取应用信息 List<ApplicationInfo> applicationInfos=pm.getInstalledApplications(PackageManager.MATCH_UNINSTALLED_PACKAGES); List<PMAppInfo> pmAppInfos=new ArrayList<PMAppInfo>(); //判断应用类型 switch (flag){ case ALL_APP: pmAppInfos.clear(); for (ApplicationInfo app: applicationInfos){ pmAppInfos.add(makeAppInfo(app)); } break; case SYSTEM_APP: pmAppInfos.clear(); for (ApplicationInfo app : applicationInfos) { if ((app.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { pmAppInfos.add(makeAppInfo(app)); } } break; case THIRD_APP: pmAppInfos.clear(); for (ApplicationInfo app : applicationInfos) { if ((app.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) { pmAppInfos.add(makeAppInfo(app)); } else if ((app.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) { pmAppInfos.add(makeAppInfo(app)); } } break; case SDCARD_APP: pmAppInfos.clear(); for (ApplicationInfo app : applicationInfos) { if ((app.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) { pmAppInfos.add(makeAppInfo(app)); } } break; default: return null; } return pmAppInfos; } 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); } }
————————————————————————————————————————————————————
小练习/Android APK应用信息获取之ActivityManager
AMProcessInfo
public class AMProcessInfo { private String pid; private String uid; private String memorySize; private String processName; public AMProcessInfo() { } public String getPid() { return pid; } public void setPid(String pid) { this.pid = pid; } public String getUid() { return uid; } public void setUid(String uid) { this.uid = uid; } public String getMemorySize() { return memorySize; } public void setMemorySize(String memorySize) { this.memorySize = memorySize; } public String getProcessName() { return processName; } public void setProcessName(String processName) { this.processName = processName; } }
AMProcessAdapter
import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import java.util.List; public class AMProcessAdapter extends BaseAdapter { private List<AMProcessInfo> mListData = null; private LayoutInflater mInfater; public AMProcessAdapter(Context context, List<AMProcessInfo> listData) { mInfater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mListData = listData; } @Override public int getCount() { return mListData.size(); } @Override public Object getItem(int position) { return mListData.get(position); } @Override public long getItemId(int position) { return position; } @SuppressLint("InflateParams") @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = mInfater.inflate(R.layout.am_process_item, null); holder = new ViewHolder(); holder.tvPID = (TextView) convertView.findViewById(R.id.tv_pid); holder.tvUID = (TextView) convertView.findViewById(R.id.tv_uid); holder.tvMemorySize = (TextView) convertView.findViewById(R.id.tv_size); holder.tvProcessName = (TextView) convertView.findViewById(R.id.tv_name); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } AMProcessInfo processInfo = (AMProcessInfo) getItem(position); holder.tvPID.setText("Pid:" + processInfo.getPid()); holder.tvUID.setText("Uid:" + processInfo.getUid()); holder.tvMemorySize.setText(processInfo.getMemorySize() + "KB"); holder.tvProcessName.setText(processInfo.getProcessName()); return convertView; } static class ViewHolder { TextView tvPID; TextView tvUID; TextView tvMemorySize; TextView tvProcessName; } }
AMMainAc
import android.app.ActivityManager; import android.content.Context; import android.os.Bundle; import android.os.Debug; import android.support.v7.app.AppCompatActivity; import android.view.inputmethod.InputMethodManager; import android.widget.ListView; import java.util.ArrayList; import java.util.List; /** * Created by YRC on 2017/10/30. */ public class AMMainActivity extends AppCompatActivity{ private ActivityManager mActivityManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.am_process_main); ListView mListView = findViewById(R.id.listView_am_process); mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); mListView.setAdapter(new AMProcessAdapter(this, getRunningProcessInfo())); } private List<AMProcessInfo> getRunningProcessInfo() { List<AMProcessInfo> mAmProcessInfoList = new ArrayList<>(); List<ActivityManager.RunningAppProcessInfo> appProcessList = mActivityManager.getRunningAppProcesses(); for (int i = 0; i < appProcessList.size(); i++) { ActivityManager.RunningAppProcessInfo info = appProcessList.get(i); int pid = info.pid; int uid = info.uid; String processName = info.processName; int[] memoryPid = new int[]{pid}; Debug.MemoryInfo[] memoryInfo = mActivityManager .getProcessMemoryInfo(memoryPid); int memorySize = memoryInfo[0].getTotalPss(); AMProcessInfo processInfo = new AMProcessInfo(); processInfo.setPid("" + pid); processInfo.setUid("" + uid); processInfo.setMemorySize("" + memorySize); processInfo.setProcessName(processName); mAmProcessInfoList.add(processInfo); } return mAmProcessInfoList; } //CleanLeakUtils工具类 @Override protected void onDestroy() { CleanLeakUtils.fixInputMethodManagerLeak(AMMainActivity.this); super.onDestroy(); } }