个人总结+代码/Android系统信息与安全Part2


小练习/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();
    }
}

    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值