在Android中获取手机已经安装的apk文件信息

-)
(PackageInfo,ResolvenInfo)
(eg:应用图片
应用名,包名等)

通过PackageManager 可以获取手机端已经安装的apk信息,
代码如下:
PackageManager packageManager =
this.getPackagetManager();
List<PackageInfo> packageInfo = packagetManaget
.getInstallPackages(0);// 0 代表获取所有的

区分软件是系统预装 还是用户安装的:
a)从packageInfoList 获取的packageInfo,在通过
packageInfo.applicationInfo获取application

b) 判断(application.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
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);

}
----------------
获取支持分享的应用的代码:
**
* 查询手机内所有支持分享的应用
* @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);

}


获得程序的大小



//获取应用程序信息
public void getpkginfo(String pkg){
PackageManager pm = getPackageManager();
try {
Method getPackageSizeInfo = pm.getClass()
.getMethod("getPackageSizeInfo", String.class,
IPackageStatsObserver.class);
getPackageSizeInfo.invoke(pm, pkg,
new PkgSizeObserver());
} catch (Exception e) {
// TODO: handle exception
}
}
class PkgSizeObserver extends IPackageStatsObserver.Stub {
public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) {
System.out.println("应用程序大小: "+pStats.codeSize);

}
}



安装:
//将服务器返回的byte[]形式的apk文件,保存到SD卡上
String str = "/CanavaCancel.apk";
String fileName = Environment.getExternalStorageDirectory() + str;
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive");
startActivity(intent);



卸载:
Uri packageURI = Uri.parse("package:com.demo.CanavaCancel");
Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
startActivity(uninstallIntent);
Environment拥有一些可以获取环境变量的方法
package:com.demo.CanavaCancel 这个形式是 package:程序完整的路径 (包名+程序名).




总结:
通过 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. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
  5. android中跳转系统自带的界面
  6. Android(安卓)加载大图片是出现的 OutOfMemoryError问题
  7. android 6.0及以下获取wifi mac地址
  8. android 图片的浏览、缩放、拖动和自动居中示例
  9. android Environment 常用方法(获取存储目录)

随机推荐

  1. android中PopupWindow的使用详解
  2. android 处理图片工具
  3. Android(安卓)Layout Tricks #1(Android(
  4. Android(安卓)URL访问网络资源,通过URL加
  5. Android(安卓)获取手机电量
  6. Android(安卓)arm模拟器的速度提升方法
  7. TimePicker组件&DatePicker组件
  8. Android(安卓)ToastUtils,吐司工具类
  9. android开机自启广播无效果的曲线解决方
  10. Android(安卓)MainActivity如何加载BaseA