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

PackageManager packageManager = this.getPackageManager();List<PackageInfo> packageInfoList = packageManager.getInstalledPackages(0);

通过以上方法,可以得到手机中安装的所有应用程序,既包括了手动安装的apk包的信息,也包括了系统预装的应用软件的信息,要区分这两类软件可使用以下方法:

a.从packageInfoList获取的packageInfo,再通过packageInfo.applicationInfo获取applicationInfo。

b.判断(applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM)的值,该值大于0时,表示获取的应用为系统预装的应用,反之则为手动安装的应用。

大家可以看下代码,说明已经写在注释中。

获取应用的代码:

/** * 查询手机内非系统应用 * @param context * @return */public static List<PackageInfo> getAllApps(Context context) {List<PackageInfo> apps = new ArrayList<PackageInfo>();PackageManager pManager = context.getPackageManager();//获取手机内所有应用List<PackageInfo> paklist = pManager.getInstalledPackages(0);for (int i = 0; i < paklist.size(); i++) {PackageInfo pak = (PackageInfo) paklist.get(i);//判断是否为非系统预装的应用程序if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) {// customs applicationsapps.add(pak);}}return apps;}


获取图片、应用名、包名:

PackageManager pManager = MessageSendActivity.this.getPackageManager();List<PackageInfo> appList  = Utils.getAllApps(MessageSendActivity.this);                    for(int i=0;i<appList.size();i++) {PackageInfo pinfo = appList.get(i);ShareItemInfo shareItem = new ShareItemInfo();//set IconshareItem.setIcon(pManager.getApplicationIcon(pinfo.applicationInfo));//set Application NameshareItem.setLabel(pManager.getApplicationLabel(pinfo.applicationInfo).toString());//set Package Name shareItem.setPackageName(pinfo.applicationInfo.packageName);                    }


其中ShareItemInfo 类是我本地自定义的,各位可以忽略!

另为,有人可能在找 分享应用列表,在此一并说下吧。

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

/** * 查询手机内所有支持分享的应用 * @param context * @return */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 获取具体信息方法:

包名获取方法: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(安卓)Handler消息机制中的ThreadLocal源码分析
  2. 获取手机的mac地址
  3. android 初始化时获得控件位置,宽高的属性
  4. Android显式intent和隐式intent
  5. Android(安卓)AysncTask 从源码角度简单理解它的使用限制原因
  6. Android(安卓)中Service组件
  7. 黑马程序员12——android之事件传播机制
  8. android Debug调试
  9. 二种方法实现 Android(安卓)TabWidget

随机推荐

  1. android 全屏去掉底部虚拟导航栏
  2. android 通过 sharedpreferences 来缓存
  3. Android项目开发经验汇总
  4. Android(安卓)总结:自定义键盘实现原理和
  5. Android(安卓)获取手机信息
  6. Android(安卓)Studio Could not find met
  7. Android(安卓)常用文件路径
  8. Android: 可以横向拖动的TabHost
  9. Android实现CoverFlow效果
  10. AndroidManifest中android:label与第三方