【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)

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

[java] view plaincopyprint?

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

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

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

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

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

获取应用的代码:

[java] view plaincopyprint?

  1. /**
  2. * 查询手机内非系统应用
  3. * @param context
  4. * @return
  5. */
  6. public static List<PackageInfo> getAllApps(Context context) {
  7. List<PackageInfo> apps = new ArrayList<PackageInfo>();
  8. PackageManager pManager = context.getPackageManager();
  9. //获取手机内所有应用
  10. List<PackageInfo> paklist = pManager.getInstalledPackages(0);
  11. for (int i = 0; i < paklist.size(); i++) {
  12. PackageInfo pak = (PackageInfo) paklist.get(i);
  13. //判断是否为非系统预装的应用程序
  14. if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) {
  15. // customs applications
  16. apps.add(pak);
  17. }
  18. }
  19. return apps;
  20. }

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

[java] view plaincopyprint?

  1. PackageManager pManager = MessageSendActivity.this.getPackageManager();
  2. List<PackageInfo> appList  = Utils.getAllApps(MessageSendActivity.this);
  3. for(int i=0;i<appList.size();i++) {
  4. PackageInfo pinfo = appList.get(i);
  5. ShareItemInfo shareItem = new ShareItemInfo();
  6. //set Icon
  7. shareItem.setIcon(pManager.getApplicationIcon(pinfo.applicationInfo));
  8. //set Application Name
  9. shareItem.setLabel(pManager.getApplicationLabel(pinfo.applicationInfo).toString());
  10. //set Package Name
  11. shareItem.setPackageName(pinfo.applicationInfo.packageName);
  12. }

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

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

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

[java] view plaincopyprint?

  1. /**
  2. * 查询手机内所有支持分享的应用
  3. * @param context
  4. * @return
  5. */
  6. public static List<ResolveInfo> getShareApps(Context context){
  7. List<ResolveInfo> mApps = new ArrayList<ResolveInfo>();
  8. Intent intent=new Intent(Intent.ACTION_SEND,null);
  9. intent.addCategory(Intent.CATEGORY_DEFAULT);
  10. intent.setType("text/plain");
  11. PackageManager pManager = context.getPackageManager();
  12. mApps = pManager.queryIntentActivities(intent,PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
  13. return mApps;
  14. }

由于该方法,返回的并不是 PackageInfo 对象。而是 ResolveInfo。因此获取图片、应用名、包名的方法不一样,如下:

[java] view plaincopyprint?

  1. PackageManager pManager = MessageSendActivity.this.getPackageManager();
  2. /*********************查询手机内所有支持分享的应用*********************/
  3. List<ResolveInfo> resolveList  = Utils.getShareApps(MessageSendActivity.this);
  4. for(int i=0;i<resolveList.size();i++) {
  5. ResolveInfo resolve = resolveList.get(i);
  6. ShareItemInfo shareItem = new ShareItemInfo();
  7. //set Icon
  8. shareItem.setIcon(resolve.loadIcon(pManager));
  9. //set Application Name
  10. shareItem.setLabel(resolve.loadLabel(pManager).toString());
  11. //set Package Name
  12. shareItem.setPackageName(resolve.activityInfo.packageName);
  13. }


总结:

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

时间: 03-04

【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)的相关文章

android 获取设备中已启动的服务并判断某一服务是否启动

我们常常在开发的时候,通过获取系统已启动的服务来判断该服务器是否还需要再启动. 而本文将介绍android设备中已启动的服务,并判断某一服务是启动 1.根据ACTIVITY_SERVICE获取系统服务 activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 2.获取系统中正在运行的服务 runningList = activityManager.getRunningServices(30);//代表我们希望返

用AsyncTask加载手机中已经安装的应用信息

最近在项目中一个小功能就是用ListView展示出手机中已经安装的应用信息,在网上找了一个Demo(感谢demo的分享者),然后根据自己的需要改动了一下,把改后的代码贴出来,留个笔记: ---------------先是应用程序的信息Bean------------------------ public class AppInfo implements Serializable { private static final long serialVersionUID = 1L; /**应用名称*

导出已安装到手机中程序的apk文件

查看该手机所有安装包的包名, 输入adb shell pm list packages 找到你要导出的包名 获取该安装apk的路径, 输入adb shell pm path com.pfoc.myacurite 得到包所在路径: 导出文件, adb pull /data/app/com.pfoc.myacurite-1/base.apk /Users/myuser/Downloads 扩展一下pm命令:pm 命令是Android里面packageManage的命令行,用于安装包的操作.使用pm命

android动态加载已安装apk中的方法

在android开发中,有很多时候是需要用到动态加载的,今天学习在android中动态加载已安装的apk中的方法. 首先,我们需要新建一个用来被加载的android工程,暂且给他取名叫做:plugproj 在plugproj中新建一个类Dynamic,在这个类中,我们新建一些方法,等会我们会分别在该工程安装和没有安装的情况下加载这些方法,Dynamic.java如下: package com.example.plugproj; import android.app.Activity; impor

电脑用bat脚本给手机批量自动安装apk文件 autoInstall.bat

------创建这个文件autoInstall.bat 内容如下: @ECHO off @REM 将adb.exe添加到PATH中ECHO 初始化…@SET PATH=%PATH%;%CD%\Adb@REM SET PATH @REM 无限循环的标签:LOOP ECHO 等待您插入手机…adb wait-for-device @REM 循环安装本目录下的APK文件FOR %%i IN (*.apk) DO ( ECHO 正在安装:%%i adb install %%i )@echo off EC

【小功能2】android获取手机信息(号码,内存,CPU,分辨率,MAC,IP,SD卡,IMEI,经纬度,信号强度等等)

为了实现一个功能,需要搜集手机信息,自己先在网上找了相关信息进行了汇总,主要是汇集手机的信息,一般想要的信息在手机设置->关于手机->状态消息里面包含了手机的各种信息,下面的代码中也主要显示了那些信息,但是源码的方法我还没有看,先把总结的贴出来.先上图(太多就截取几个).  上代码啦,太多了,就写主要代码了. // 获取Android手机中SD卡存储信息 获取剩余空间 public void getSDCardInfo() { // 在manifest.xml文件中要添加 /* * <u

Android获取手机相关信息

首先,一个小例子: package com.brio.testid; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.os.Bundle; import android.provider.Settings.Secure; import android.widget.TextView; public class MainActivity extends Activity {

快捷地安装apk文件到android手机中

在pc中,在没有安装各种手机助手的情况下,android程序员如何快捷地(对apk文件双击,即可自动安装,不用手动输命令)安装apk文件到android手机中? 可以使用以下方法:使用批处理文件 + Quick Batch File (De)Compiler 步骤: 1.编写以下dos命令,并保存为apk.bat @echo off echo 正在连接手机... adb wait-for-device echo. rem 获取双击apk文件的绝对路径 set apk=%* echo 正在安装:%

Android 在代码中安装 APK 文件

废话不说,上代码 private void install(String filePath) { Log.i(TAG, "开始执行安装: " + filePath); File apkFile = new File(filePath); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (Build.VERSION.SDK_INT >