{
/**
* 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);
return applicationItemInfo;
}
}
============================================================================================================
获取支持分享的应用的代码:
-
-
public
static List<ResolveInfo> getShareApps(Context context){ -
List<ResolveInfo> mApps = new ArrayList<ResolveInfo>(); -
Intent intent=new Intent(Intent.ACTION_SEND,null); -
intent.addCategory(Intent.CATEGORY_DEFAULT); -
intent.setType("text/plain"); -
PackageManager pManager = context.getPackageManager(); -
mApps = pManager.queryIntentActivities(intent,PackageManager.COMPONENT_ENABLED_STATE_DEFAULT); -
return mApps; -
}
-
//由于该方法,返回的并不是
PackageInfo 对象。而是 ResolveInfo。因此获取图片、应用名、包名的方法不一样,如下: -
PackageManager pManager = MessageSendActivity.this.getPackageManager(); -
-
List<ResolveInfo> resolveList = Utils.getShareApps(MessageSendActivity.this); -
for(int i=0;i<resolveList.size();i++) { -
ResolveInfo resolve = resolveList.get(i); -
ShareItemInfo shareItem = new ShareItemInfo(); -
//set Icon -
shareItem.setIcon(resolve.loadIcon(pManager)); -
//set Application Name -
shareItem.setLabel(resolve.loadLabel(pManager).toString()); -
//set Package Name -
shareItem.setPackageName(resolve.activityInfo.packageName); -
}
总结:
通过 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()