众所周知,通过PackageManager可以获取手机端已安装的apk文件的信息,具体代码如下:

        
  1. PackageManagerpackageManager=this.getPackageManager();
  2. List<PackageInfo>packageInfoList=packageManager.getInstalledPackages(0);

        
  1. /**
  2. *查询手机内非系统应用
  3. *@paramcontext
  4. *@return
  5. */
  6. publicstaticList<PackageInfo>getAllApps(Contextcontext){
  7. List<PackageInfo>apps=newArrayList<PackageInfo>();
  8. PackageManagerpManager=context.getPackageManager();
  9. //获取手机内所有应用
  10. List<PackageInfo>paklist=pManager.getInstalledPackages(0);
  11. for(inti=0;i<paklist.size();i++){
  12. PackageInfopak=(PackageInfo)paklist.get(i);
  13. //判断是否为非系统预装的应用程序
  14. if((pak.applicationInfo.flags&pak.applicationInfo.FLAG_SYSTEM)<=0){
  15. //customsapplications
  16. apps.add(pak);
  17. }
  18. }
  19. returnapps;
  20. }
  21. 获取图片、应用名、包名:
  22. PackageManagerpManager=MessageSendActivity.this.getPackageManager();
  23. List<PackageInfo>appList=Utils.getAllApps(MessageSendActivity.this);
  24. for(inti=0;i<appList.size();i++){
  25. PackageInfopinfo=appList.get(i);
  26. ShareItemInfoshareItem=newShareItemInfo();
  27. //setIcon
  28. shareItem.setIcon(pManager.getApplicationIcon(pinfo.applicationInfo));
  29. //setApplicationName
  30. shareItem.setLabel(pManager.getApplicationLabel(pinfo.applicationInfo).toString());
  31. //setPackageName
  32. shareItem.setPackageName(pinfo.applicationInfo.packageName);
  33. }

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

        
  1. /**
  2. *查询手机内所有支持分享的应用
  3. *@paramcontext
  4. *@return
  5. */
  6. publicstaticList<ResolveInfo>getShareApps(Contextcontext){
  7. List<ResolveInfo>mApps=newArrayList<ResolveInfo>();
  8. Intentintent=newIntent(Intent.ACTION_SEND,null);
  9. intent.addCategory(Intent.CATEGORY_DEFAULT);
  10. intent.setType("text/plain");
  11. PackageManagerpManager=context.getPackageManager();
  12. mApps=pManager.queryIntentActivities(intent,PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
  13. returnmApps;
  14. }
  15. //由于该方法,返回的并不是PackageInfo对象。而是ResolveInfo。因此获取图片、应用名、包名的方法不一样,如下:
  16. PackageManagerpManager=MessageSendActivity.this.getPackageManager();
  17. /*********************查询手机内所有支持分享的应用*********************/
  18. List<ResolveInfo>resolveList=Utils.getShareApps(MessageSendActivity.this);
  19. for(inti=0;i<resolveList.size();i++){
  20. ResolveInforesolve=resolveList.get(i);
  21. ShareItemInfoshareItem=newShareItemInfo();
  22. //setIcon
  23. shareItem.setIcon(resolve.loadIcon(pManager));
  24. //setApplicationName
  25. shareItem.setLabel(resolve.loadLabel(pManager).toString());
  26. //setPackageName
  27. shareItem.setPackageName(resolve.activityInfo.packageName);
  28. }

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

更多相关文章

  1. Android下得到APK包含信息
  2. Android(安卓)adb.exe程序启动不起来 具体解决方法
  3. activity状态的保存和保持(onRetainNonConfigurationInstance和g
  4. Android选项菜单和上下文菜单解析
  5. Android伸手党系列之八:Android常用开发问题及经验分享
  6. Android(安卓)studio 软件安装过程中遇到的问题
  7. Android(安卓)之 WallpaperManager用法
  8. android之多媒体篇(一)
  9. Android访问SQlite实现基本CRUD操作

随机推荐

  1. Android调用自定义Dialog中的控件
  2. Android(安卓)Support Multidex原理分析
  3. android 调用系统日历
  4. android 图片叠加效果实现
  5. Android(安卓)发送通知 notification
  6. Android中Intent传值
  7. Android的ArrayAdapter
  8. Android(安卓)NDK之----- C调用Java [Get
  9. docker入门到进阶一
  10. 登录表单和iframe后台架构