<script></script>
众所周知,通过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
applications
apps.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 Icon
shareItem.setIcon(pManager.getApplicationIcon(pinfo.applicationInfo));
//set Application Name
shareItem.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 对象。而是 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()
分享到:
相关推荐
android获取未安装APK文件的图标 android开发技巧整理
代码如下:/** * 获取apk包的信息:版本号,名称,图标等 * @param absPath apk包的绝对路径 * @param context */ public void apkInfo(String absPath,Context context) { PackageManager pm = context....
前提是已设置ANDROID_HOME环境变量,使用aapt工具获取apk的信息,保存至脚本所在目录下的PackageInfo.txt文件中: import os import tempfile import re tempFile = tempfile.gettempdir() def get_aapt(): if ...
一、获取APK图标 public static Drawable getApkIcon(Context context, String apkPath) { PackageManager pm = context.getPackageManager(); PackageInfo info = pm.getPackageArchiveInfo(apkPath, ...
博文附件,通过PackageInfo获取App签名信息
PackageManager实例,内容包含ApplicationInfo、PackageInfo、ResolveInfo、ActivityInfo的实例
Android启动内置APK和动态发送接收自定义广播实例详解 ...除此之外Android还未我们提供了一些对应的类来管理相关的xml文件,比如说可以通过PackageInfo来获取AndroidManifest.xml文件的信息;PackageItemInfo——
代码如下:这是获取apk包的签名信息private String getSign(Context context) { PackageManager pm = context.getPackageManager(); List<PackageInfo> apps = pm.getInstalledPackages(PackageManager.GET_...
包裹信息显示有关已安装的 Android 应用程序包的信息截屏构建依赖浮动动作按钮( ) 材料对话框( )
本文实例讲述了Android实现整理PackageManager获取所有安装程序信息的方法。分享给大家供大家参考,具体如下: List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);//获取安装程序的包名 for ...
这个小程序主要实现了获取程序包的相关信息,主要包括包的icon,包名还有应用的名称。代码中有详细的注释,方便阅读。
npm软件包信息安装使用Vundle安装: Plugin "https://github.com/whatever555/npm-package-info" 用法将光标放在包名称您的package.json文件上,然后调用:PackageInfo 插件将显示有关该软件包的一些信息。...
方法1:【使用调用接口方法,由于安装卸载应用程序的部分API是隐藏的,所以必须下载Android系统源码,在源码下开发并编译之后使用MM命令编译生成APK文件】 import java.io.File; import android.app.Activity; ...
本文实例讲述了Android编程判断手机上是否安装了某个程序的方法。分享给大家供大家参考,具体如下: 1. 首先得到该程序的包名 这个连上手机ADB,看logcat就能看到。比如:QQ客户端的包名是com.tencent.mobileqq。 2....
import android.os.Bundle; import android.text.TextUtils; import android.widget.TextView;... import android.content.pm.PackageInfo; import android.content.pm.PackageManager; /** * Demo描述: *
下面一段代码给大家分享了android中判断手机是否安装了qq或者微信,代码简单易懂,非常不错,具有参考借鉴价值,需要的的朋友参考下吧 public static boolean isWeixinAvilible(Context context) { final ...
本文实例讲述了Android实现获取签名及公钥的方法。分享给大家供大家参考。具体如下: 1. java代码如下: private byte[] getSign(Context context) { PackageManager pm = context.getPackageManager(); List...
//获取版本号等信息 PackageManager packageManager = getPackageManager(); //得到包的信息 try { packageInfo = packageManager.getPackageInfo(getPackageName(),0); //得到包的信息 } catch (PackageManager....
import android.content.pm.PackageInfo; import android.content.pm.PackageManager; /** * Created by 刘楠 on 2016-03-22. */ public class PackageUtils { /** * 获取版本名称 * @param context 上下文
如下所示: public class GetPublicKey { /** * 获取签名公钥 * @param mContext * @return ... PackageInfo packageInfo = mContext.getPackageManager().getPackageInfo( GetAppInfo.getPackageName