android群英传笔记 android apk应用信息获取

来源:互联网 发布:dota视频站软件 编辑:程序博客网 时间:2024/06/03 03:43

查询APK应用相关主要用到两个助手:PM(PackageManager)和AM(ActivityManager).PM主宰着应用的包管理,获取应用包信息。AM主宰者应用的活动管理,获得运行的应用程序信息。

例举一些常用的系统封装信息

PackageManager 

ActivityInfo:封装了再Mainifest文件中<activity></activity>和<receiver></receiver>之间的所有信息。包括name,icon,label,launchmod等

ServiceInfo:封装了<service></service>之间的所有信息。

ApplicationInfo:封装了<application></application>之间的信息,不过特别的是ApplicationInfo包含很说Flag,可以根据这些flag来判断应用类型,比如FLAG_SYSTEM表示为系统应用。

PackageInfo:包含了所有activity service等信息。

ResolveInfo:包含<intent>信息的上一级信息,它可以返回ActivityInfo ,ServiceInfo等包含<intent>的信息,常用来,帮助我们找那些饱含特定Intent条件信息,如带分享功能,播放功能的应用。

  示例:

public class AppInfoActivity extends AppCompatActivity implements View.OnClickListener {    private List<PMAppInfo> appInfoList = new ArrayList<>();    private PackageManager pm;    public static final int All_APP = 1;    public static final int SYSTEM_APP = 2;    public static final int THIRD_APP = 3;    public static final int SDCARD_APP = 4;    private ListView list;    private MyAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_app_info);        initView();    }    private void initView() {        findViewById(R.id.all).setOnClickListener(this);        findViewById(R.id.system).setOnClickListener(this);        findViewById(R.id.three).setOnClickListener(this);        findViewById(R.id.sdCard).setOnClickListener(this);        list = ((ListView) findViewById(R.id.list));        appInfoList = getAppInfoList(1);        adapter = new MyAdapter(this, appInfoList);        list.setAdapter(adapter);    }    /**     *  pm = getPackageManager();获取一个PackageManager     *  pm.getApplicationInfo();       以ApplicationInfo的形势返回指定包名的applicationInfo     *  pm.getApplicationIcon();       返回指定包名的icon     *  pm.getInstalledApplications(); 以applicationInfo的形式返回安装的应用     *  pm.getInstalledPackages();     以packageInfo的形式返回安装的应用     *  pm.queryIntentActivities();    返回指定intent的resolveInfo对象,activity的集合     *  pm.queryIntentServices();      返回指定intent的resolveInfo对象,Services的集合     *  pm.resolveActivity();          返回指定的intent的activity     *  pm.resolveService();           返回指定intent的service     * @param flag     * @return     */    private List<PMAppInfo> getAppInfoList(int flag) {        pm = getPackageManager();        List<ApplicationInfo> applications = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);        List<PMAppInfo> appInfoList = new ArrayList<>();        switch (flag) {            case All_APP://所有应用                appInfoList.clear();                for (ApplicationInfo app : applications) {                    appInfoList.add(makeAppInfo(app));                }                break;            case SYSTEM_APP: //系统应用                appInfoList.clear();                for (ApplicationInfo app : applications) {                    if ((app.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {                        appInfoList.add(makeAppInfo(app));                    }                }                break;            case THIRD_APP://第三方应用                appInfoList.clear();                appInfoList.clear();                for (ApplicationInfo app : applications) {                    if ((app.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) {                        appInfoList.add(makeAppInfo(app));                    } else if ((app.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {                        appInfoList.add(makeAppInfo(app));                    }                }                break;            case SDCARD_APP://sd卡上的应用                appInfoList.clear();                appInfoList.clear();                for (ApplicationInfo app : applications) {                    if ((app.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) {                        appInfoList.add(makeAppInfo(app));                    }                }                break;        }        return appInfoList;    }    private PMAppInfo makeAppInfo(ApplicationInfo app) {        PMAppInfo pmAppInfo = new PMAppInfo();        pmAppInfo.setAppLabel((String) app.loadLabel(pm));        pmAppInfo.setAppIcon(app.loadIcon(pm));        pmAppInfo.setPkgName(app.packageName);        return pmAppInfo;    }    @Override    public void onClick(View view) {        switch (view.getId()) {            case R.id.all:                appInfoList = getAppInfoList(1);            case R.id.system:                appInfoList = getAppInfoList(2);                break;            case R.id.three:                appInfoList = getAppInfoList(3);                break;            case R.id.sdCard:                appInfoList = getAppInfoList(4);                break;        }        adapter.notifyDate(appInfoList);        adapter.notifyDataSetChanged();    }}

ActivityManager 

ActivityManager.MemoryInfo:用于获取全局的内存使用信息。MemoryInfo有几个非常重要的字段:availMem-系统可用内存。totalMem-总内存,threshold-第内存的阈值,即区分是否是内存的临界值。lowMemory-是否处于第内存。

Debug,MemoryInfo:用于获取进程下的内存信息。

RunningAppProcessInfo:运行进程信息,存储的字段自然是进程相关的信息,processName-进程名,pid-进程pid,uid-进程uid,pkgList-该进程下的所有包。

RunningServiceInfo:用于封装运行的服务信息,在它里面同样包含了一些服务进程的信息,同时还包括一些其他信息。activeSine-第一次激活时间,方式,foregroung-服务是否在后台执行。

示例:

public class AMProcessActivity extends AppCompatActivity {    private List<AMProcessInfo> amProcessInfos;    private ActivityManager activityManager;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_amprocess);        initParams();    }    private void initParams() {        activityManager = ((ActivityManager) getSystemService(ACTIVITY_SERVICE));        getRunningProcessInfo();    }    private List<AMProcessInfo> getRunningProcessInfo() {        amProcessInfos = new ArrayList<>();        List<ActivityManager.RunningAppProcessInfo> appProcessInfos = activityManager.getRunningAppProcesses();        for (int i = 0; i < appProcessInfos.size(); i++) {            ActivityManager.RunningAppProcessInfo info = appProcessInfos.get(i);            int pid = info.pid;            int uid = info.uid;            String processName = info.processName;            int[] memoryPid = new int[]{pid};            Debug.MemoryInfo[] memoryInfo = activityManager.getProcessMemoryInfo(memoryPid);            int memorySize = memoryInfo[0].getTotalPss();            AMProcessInfo amProcessInfo = new AMProcessInfo();            amProcessInfo.setMemorySize(memorySize + "");            amProcessInfo.setPid(pid + "");            amProcessInfo.setProcessName(processName);            amProcessInfo.setUid(uid + "");            amProcessInfos.add(amProcessInfo);        }        LogUtil.i("AMProcessActivity","amProcessInfos: "+amProcessInfos);        return amProcessInfos;    }}


0 0
原创粉丝点击