【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用 ...
16lz
2021-01-25
众所周知,通过PackageManager可以获取手机端已安装的apk文件的信息,具体代码如下:
- PackageManagerpackageManager=this.getPackageManager();
- List<PackageInfo>packageInfoList=packageManager.getInstalledPackages(0);
- /**
- *查询手机内非系统应用
- *@paramcontext
- *@return
- */
- publicstaticList<PackageInfo>getAllApps(Contextcontext){
- List<PackageInfo>apps=newArrayList<PackageInfo>();
- PackageManagerpManager=context.getPackageManager();
- //获取手机内所有应用
- List<PackageInfo>paklist=pManager.getInstalledPackages(0);
- for(inti=0;i<paklist.size();i++){
- PackageInfopak=(PackageInfo)paklist.get(i);
- //判断是否为非系统预装的应用程序
- if((pak.applicationInfo.flags&pak.applicationInfo.FLAG_SYSTEM)<=0){
- //customsapplications
- apps.add(pak);
- }
- }
- returnapps;
- }
- 获取图片、应用名、包名:
- PackageManagerpManager=MessageSendActivity.this.getPackageManager();
- List<PackageInfo>appList=Utils.getAllApps(MessageSendActivity.this);
- for(inti=0;i<appList.size();i++){
- PackageInfopinfo=appList.get(i);
- ShareItemInfoshareItem=newShareItemInfo();
- //setIcon
- shareItem.setIcon(pManager.getApplicationIcon(pinfo.applicationInfo));
- //setApplicationName
- shareItem.setLabel(pManager.getApplicationLabel(pinfo.applicationInfo).toString());
- //setPackageName
- shareItem.setPackageName(pinfo.applicationInfo.packageName);
- }
获取支持分享的应用的代码:
- /**
- *查询手机内所有支持分享的应用
- *@paramcontext
- *@return
- */
- publicstaticList<ResolveInfo>getShareApps(Contextcontext){
- List<ResolveInfo>mApps=newArrayList<ResolveInfo>();
- Intentintent=newIntent(Intent.ACTION_SEND,null);
- intent.addCategory(Intent.CATEGORY_DEFAULT);
- intent.setType("text/plain");
- PackageManagerpManager=context.getPackageManager();
- mApps=pManager.queryIntentActivities(intent,PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
- returnmApps;
- }
- //由于该方法,返回的并不是PackageInfo对象。而是ResolveInfo。因此获取图片、应用名、包名的方法不一样,如下:
- PackageManagerpManager=MessageSendActivity.this.getPackageManager();
- /*********************查询手机内所有支持分享的应用*********************/
- List<ResolveInfo>resolveList=Utils.getShareApps(MessageSendActivity.this);
- for(inti=0;i<resolveList.size();i++){
- ResolveInforesolve=resolveList.get(i);
- ShareItemInfoshareItem=newShareItemInfo();
- //setIcon
- shareItem.setIcon(resolve.loadIcon(pManager));
- //setApplicationName
- shareItem.setLabel(resolve.loadLabel(pManager).toString());
- //setPackageName
- 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()
更多相关文章
- Android下得到APK包含信息
- Android(安卓)adb.exe程序启动不起来 具体解决方法
- activity状态的保存和保持(onRetainNonConfigurationInstance和g
- Android选项菜单和上下文菜单解析
- Android伸手党系列之八:Android常用开发问题及经验分享
- Android(安卓)studio 软件安装过程中遇到的问题
- Android(安卓)之 WallpaperManager用法
- android之多媒体篇(一)
- Android访问SQlite实现基本CRUD操作