PackageManager获取应用列表

通过 PackageInfo  获取具体信息方法:
包名获取方法:packageInfo.packageName

icon获取获取方法:packageManager.getApplicationIcon(applicationInfo)

应用名称获取方法:packageManager.getApplicationLabel(applicationInfo)

使用权限获取方法:packageManager.getPackageInfo(packageName,PackageManager.GET_PERMISSIONS)

.requestedPermissions


通过 ResolveInfo 获取具体信息方法:
包名获取方法:resolve.activityInfo.packageName

icon获取获取方法:resolve.loadIcon(packageManager)

应用名称获取方法:resolve.loadLabel(packageManager).toString()

PackageManager可获取所有可启动主Activity,可启动主Activity都带有包含MAIN操作(action)和LAUNCHER类别(category)的intent过滤器(intent-filter)。即在AndroidManifest.xml文件中注册了main 和launcher的activity。

private void setupAdapter(){

Intent startupIntent = newIntent(Intent.ACTION_MAIN);

startupIntent.addCategory(Intent.CATEGORY_LAUNCHER);

/**使用了Fragment,所以调用getActivity()获取当前上下文Context**/

final PackageManager packageManager = getActivity().getPackageManager();

/**获取匹配的activity列表**/

List<ResolverInfo> activities = packageManager.queryIntentActivities(startupIntent,0);

}

##获取启动应用后与未卸载比较

public List<AppInfo> queryFilterAppInfo() {
        pm = context.getPackageManager();
 
    // 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent
    Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
    resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    // 通过getPackageManager()的queryIntentActivities方法遍历,得到所有能打开的app的packageName
    List<ResolveInfo>  resolveinfoList = pm.queryIntentActivities(resolveIntent, 0);
 
    Set<String> allowPackages=new HashSet();
    for (ResolveInfo resolveInfo:resolveinfoList){
        allowPackages.add(resolveInfo.activityInfo.packageName);
    }
    debug("allowPackages = " + allowPackages);
 
    // 查询所有已经安装的应用程序,GET_UNINSTALLED_PACKAGES代表已删除,但还有安装目录的
    List<ApplicationInfo> applicationInfos = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);
    List<AppInfo> appInfos = new ArrayList<AppInfo>();
 
    for (ApplicationInfo info : applicationInfos) {
        if (allowPackages.contains(info.packageName)){
            AppInfo appInfo = new AppInfo();
 
            //获取应用的名称
            String app_name = info.loadLabel(pm).toString();
            appInfo.setApp_name(app_name);
 
            //获取应用的包名
            String packageName = info.packageName;
            appInfo.setPackagename(packageName);
 
            appInfos.add(appInfo);
        }
    }
    debug("appInfos = " + appInfos);
    return appInfos;

}

要创建启动activity的显示intent,需要从ResolveInfo对象中获取activity的包名与类名,这些信息可以从ResolveInfo对象的ActivityInfo中获取。下面创建一个显示intent并启动目标activity


 

public void onClick(View v) {

/**mResolveInfo就是之前获取的activities**/

ActivityInfo activityInfo = mResolveInfo.activityInfo;

Intent i = newIntent(Intent.ACTION_MAIN)

.setClassName(activityInfo.applicationInfo.packageName, activityInfo.name)

/**为了在启动新activity时启动新任务,需要为intent添加一个标志

FLAG_ACTIVITY_NEW_TASK标志控制每个activity仅创建一个任务**/

.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(i);

ResolveInfo类

        说明:根据<intent>节点来获取其上一层目录的信息,通常是<activity>、<receiver>、<service>节点信息。

       常用字段

             public  ActivityInfo  activityInfo     获取 ActivityInfo对象,即<activity>或<receiver >节点信息

             public ServiceInfo   serviceInfo     获取 ServiceInfo对象,即<service>节点信息

       常用方法: 

             Drawable loadIcon(PackageManager pm)             获得当前应用程序的图像

             CharSequence loadLabel(PackageManager pm)  获得当前应用程序的label

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值