查询手机中所有应用的权限,名字,原始apk的地址,开机至今的流量

本文介绍了一段用于查找应用权限并筛选出支持分享应用的代码实现,包括核心逻辑解析与实例演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class FindAllApplication
{
    /**
     * find application's permission in permissions
     * @param context
     * @param permissions : if permissions.length == 0; return all application(not system application)
     */
    public static List<ApplicationItemInfo> findApplication(Context context, String...permissions)
    {
        boolean isIn = false;
        List<ApplicationItemInfo> applicationItemInfos = new ArrayList<ApplicationItemInfo>();

        PackageManager pckMan = context.getPackageManager();

//参数根据需要获得的进行修改,如要查权限必须写GET_PERMISSIONS,否则requestedPermissions的值会是null

        List<PackageInfo> packs = pckMan.getInstalledPackages(PackageManager.GET_PERMISSIONS);
        Log.d("gc", "application size : " + packs.size());
        for (PackageInfo packageInfo : packs)
        {
            //非系统应用
            if ((packageInfo.applicationInfo.flags & packageInfo.applicationInfo.FLAG_SYSTEM) <= 0)
            {

                if(permissions.length == 0)
                {
                    applicationItemInfos.add(getApplicationItemInfo(pckMan, packageInfo));
                }else{
                    if (packageInfo.requestedPermissions != null)
                    {
                        isIn = false;
                        for (String permission : packageInfo.requestedPermissions)
                        {
                            if(checkString(permission, permissions))
                            {
                                isIn = true;
                                break;
                            }
                        }
                        if(isIn)
                        {
                            applicationItemInfos.add(getApplicationItemInfo(pckMan, packageInfo));
                        }
                        
                    }
                }
            }else {
//                Log.d("gc", "system app : "+pckMan.getApplicationLabel(packageInfo.applicationInfo).toString());
            }
        }
        Log.d("gc", "applicationItemInfos.size" + applicationItemInfos.size());
        return applicationItemInfos;
    }
    
    /**
     * 
     * @param source
     * @param strings : if strings.length == 0, return true 
     * @return
     */
    private static boolean checkString(String source, String...strings)
    {
        if(strings.length == 0)
        {
            return true;
        }
        for(String str:strings)
        {
            if(source.contains(str))
            {
                return true;
            }
        }
        return false;
    }
    
    private static ApplicationItemInfo getApplicationItemInfo(PackageManager packageManager,PackageInfo packageInfo)
    {
        ApplicationItemInfo applicationItemInfo = new ApplicationItemInfo();
        applicationItemInfo.setLabel(packageManager.getApplicationLabel(packageInfo.applicationInfo).toString());
        applicationItemInfo.setPackageName(packageInfo.applicationInfo.packageName);
        applicationItemInfo.setIcon(packageManager.getApplicationIcon(packageInfo.applicationInfo));
        applicationItemInfo.setPermission(packageInfo.requestedPermissions);
        applicationItemInfo.setUid(packageInfo.applicationInfo.uid);
        applicationItemInfo.setRx(TrafficStats.getUidRxBytes(applicationItemInfo.getUid()));

        applicationItemInfo.setTx(TrafficStats.getUidTxBytes(applicationItemInfo.getUid()));

applicationItemInfo.setSourceDir(packageInfo.applicationInfo.sourceDir);

        Log.d("gc", " app : "+applicationItemInfo.getLabel());
        return applicationItemInfo;
    }

}


============================================================================================================


获取支持分享的应用的代码:

  1.  
  2. public static List<ResolveInfo> getShareApps(Context context){ 
  3.     List<ResolveInfo> mApps new ArrayList<ResolveInfo>();  
  4.     Intent intent=new Intent(Intent.ACTION_SEND,null);  
  5.     intent.addCategory(Intent.CATEGORY_DEFAULT);  
  6.     intent.setType("text/plain");  
  7.     PackageManager pManager context.getPackageManager(); 
  8.     mApps pManager.queryIntentActivities(intent,PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);  
  9.     return mApps;  
  10. //由于该方法,返回的并不是 PackageInfo 对象。而是 ResolveInfo。因此获取图片、应用名、包名的方法不一样,如下: 
  11.                     PackageManager pManager MessageSendActivity.this.getPackageManager(); 
  12.                      
  13.                     List<ResolveInfo> resolveList  Utils.getShareApps(MessageSendActivity.this); 
  14.                     for(int i=0;i<resolveList.size();i++) 
  15.                     ResolveInfo resolve resolveList.get(i); 
  16.                     ShareItemInfo shareItem new ShareItemInfo(); 
  17.                     //set Icon 
  18.                     shareItem.setIcon(resolve.loadIcon(pManager)); 
  19.                     //set Application Name 
  20.                     shareItem.setLabel(resolve.loadLabel(pManager).toString()); 
  21.                     //set Package Name 
  22.                     shareItem.setPackageName(resolve.activityInfo.packageName); 
  23.                      

总结:
通过 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()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值