Android开发笔记: 获取Android系统里所有的app信息,并打开指定包名的App - Go语言中文社区

Android开发笔记: 获取Android系统里所有的app信息,并打开指定包名的App


1 直接上代码:

public void getApps() {
    List<ApplicationInfo> apps = queryFilterAppInfo();
    for (int i = 0; i < apps.size(); i++) {
        String name = apps.get(i).loadLabel(getPackageManager()).toString();
        final String appInfoStr = name+":"+ apps.get(i).packageName;
        tv_recv.post(new Runnable() {
            @Override
            public void run() {
                tv_recv.append(appInfoStr + "rn");
            }
        });
    }

}

  private List<ApplicationInfo> queryFilterAppInfo() {
        PackageManager pm = this.getPackageManager();
        // 查询所有已经安装的应用程序
        List<ApplicationInfo> appInfos = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);// GET_UNINSTALLED_PACKAGES代表已删除,但还有安装目录的
        List<ApplicationInfo> applicationInfos = new ArrayList<>();

        // 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent
        Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
        resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);

        // 通过getPackageManager()的queryIntentActivities方法遍历,得到所有能打开的app的packageName
        List<ResolveInfo> resolveinfoList = getPackageManager()
                .queryIntentActivities(resolveIntent, 0);
        Set<String> allowPackages = new HashSet();
        for (ResolveInfo resolveInfo : resolveinfoList) {
            allowPackages.add(resolveInfo.activityInfo.packageName);
        }

        for (ApplicationInfo app : appInfos) {
//            if((app.flags & ApplicationInfo.FLAG_SYSTEM) <= 0)//通过flag排除系统应用,会将电话、短信也排除掉
//            {
//                applicationInfos.add(app);
//            }
//            if(app.uid > 10000){//通过uid排除系统应用,在一些手机上效果不好
//                applicationInfos.add(app);
//            }
            if (allowPackages.contains(app.packageName)) {
                applicationInfos.add(app);
            }
        }
        return applicationInfos;
    }

2 效果图:



3 获取到包名,就可以用代码打开指定包名的app了

 /*
* 启动一个app
*/
    public void startAPP(String appPackageName) {
        //https://www.2cto.com/kf/201312/269058.html
        try {
            Intent intent = this.getPackageManager().getLaunchIntentForPackage(appPackageName);
            startActivity(intent);
        } catch (Exception e) {
            
            //  Toast.makeText(this, "没有安装", Toast.LENGTH_LONG).show();
        }
    }

Android ApplicationInfo 应用程序信息

1、简述

1
2
3
4
5
6
7
8
1 ApplicationInfo是android.content.pm包下的一个实体类,用于封装应用的信息,flags是其中的一个成员变量public int flags = 0;用于保存应用的标志信息。
 
2 ApplicationInfo 通过它可以得到一个应用基本信息。
   这些信息是从AndroidManifest.xml的< application >标签获取的
 
3 ApplicationInfo对象里保存的信息都是<application>标签里的属性值
 
4 ApplicationInfo与ResolveInfo比较:前者能够得到Icon、Label、meta-data、description。后者只能得到Icon、Label

2、获取ApplicationInfo

2.1 、获取手机上安装所有程序对应的 ApplicationInfo

1
2
3
4
5
6
7
8
/**
* 获取手机上安装的所有的程序对应的 ApplicationInfo
* 它是通过解析AndroidManifest.xml的< application>标签中得到的,所以它能得到所有的app
*
* 获取手机上的所有的安装的应用程序信息
* 参数为 标识  一般为 PackageManager.GET_UNINSTALLED_PACKAGES
*/
List<ApplicationInfo> list = packageManager.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);

2.2 、获取指定包名对应的 ApplicationInfo

1
2
3
4
5
6
7
/**
* 获取指定应用程序 ApplicationInfo
* 参数一对应应用程序的包名
* 参数二 应用程序对应的标识 通常为 0
*/
 
      ApplicationInfo applicationInfo = packageManager.getApplicationInfo("com.androidlongs.contactsapplication", 0);

3、通过ApplicationInfo来获取应用程序的 基本信息

3.1 、获取应用程序对应的包名、应用名称

1
2
3
4
5
6
7
8
9
//获取应用图标
Drawable drawable = applicationInfo.loadIcon(packageManager);
 
//获取应用程序的 包名
String appPackageName = applicationInfo.packageName;
 
//获取应用名
//参数 packageManager 是应用管理者对象
String appName =applicationInfo.loadLabel(packageManager).toString();

3.2 、获取应用程序对应数据的目录以及占用的空间大小

1
2
3
4
5
6
7
8
9
10
//获取应用存放数据目录
String dir = applicationInfo.sourceDir;
Log.d("app ","应用存放数据目录 " +dir);
 
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/taoerit/article/details/79752625
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 21:18:55
  • 阅读 ( 2960 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢