`
hsx9566
  • 浏览: 174241 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

获取SD卡上 未安装 APK文件 的图标等

阅读更多
各版本通用

/**
	 * 获取未安装的apk信息
	 * 
	 * @param ctx
	 * @param apkPath
	 * @return
	 */
	public static AppInfoData getApkFileInfo(Context ctx, String apkPath) {
		System.out.println(apkPath);
		File apkFile = new File(apkPath);
		if (!apkFile.exists() || !apkPath.toLowerCase().endsWith(".apk")) {
			System.out.println("文件路径不正确");
			return null;
		}
		AppInfoData appInfoData;
		String PATH_PackageParser = "android.content.pm.PackageParser";
		String PATH_AssetManager = "android.content.res.AssetManager";
		try {
			//反射得到pkgParserCls对象并实例化,有参数
			Class<?> pkgParserCls = Class.forName(PATH_PackageParser);
			Class<?>[] typeArgs = {String.class};
			Constructor<?> pkgParserCt = pkgParserCls.getConstructor(typeArgs);
			Object[] valueArgs = {apkPath};
			Object pkgParser = pkgParserCt.newInstance(valueArgs);
			
			//从pkgParserCls类得到parsePackage方法
			DisplayMetrics metrics = new DisplayMetrics();
			metrics.setToDefaults();//这个是与显示有关的, 这边使用默认
			typeArgs = new Class<?>[]{File.class,String.class,
									DisplayMetrics.class,int.class};
			Method pkgParser_parsePackageMtd = pkgParserCls.getDeclaredMethod(
					"parsePackage", typeArgs);
			
			valueArgs=new Object[]{new File(apkPath),apkPath,metrics,0};
			
			//执行pkgParser_parsePackageMtd方法并返回
			Object pkgParserPkg = pkgParser_parsePackageMtd.invoke(pkgParser,
					valueArgs);
			
			//从返回的对象得到名为"applicationInfo"的字段对象	
			if (pkgParserPkg==null) {
				return null;
			}
			Field appInfoFld = pkgParserPkg.getClass().getDeclaredField(
					"applicationInfo");
			
			//从对象"pkgParserPkg"得到字段"appInfoFld"的值
			if (appInfoFld.get(pkgParserPkg)==null) {
				return null;
			}
			ApplicationInfo info = (ApplicationInfo) appInfoFld
					.get(pkgParserPkg);			
			
			//反射得到assetMagCls对象并实例化,无参
			Class<?> assetMagCls = Class.forName(PATH_AssetManager);			
			Object assetMag = assetMagCls.newInstance();
			//从assetMagCls类得到addAssetPath方法
			typeArgs = new Class[1];
			typeArgs[0] = String.class;
			Method assetMag_addAssetPathMtd = assetMagCls.getDeclaredMethod(
					"addAssetPath", typeArgs);
			valueArgs = new Object[1];
			valueArgs[0] = apkPath;
			//执行assetMag_addAssetPathMtd方法
			assetMag_addAssetPathMtd.invoke(assetMag, valueArgs);
			
			
			//得到Resources对象并实例化,有参数
			Resources res = ctx.getResources();
			typeArgs = new Class[3];
			typeArgs[0] = assetMag.getClass();
			typeArgs[1] = res.getDisplayMetrics().getClass();
			typeArgs[2] = res.getConfiguration().getClass();
			Constructor<Resources> resCt = Resources.class
					.getConstructor(typeArgs);
			valueArgs = new Object[3];
			valueArgs[0] = assetMag;
			valueArgs[1] = res.getDisplayMetrics();
			valueArgs[2] = res.getConfiguration();
			res = (Resources) resCt.newInstance(valueArgs);
			
			
			// 读取apk文件的信息
			appInfoData = new AppInfoData();
			if (info!=null) {
				if (info.icon != 0) {// 图片存在,则读取相关信息
					Drawable icon = res.getDrawable(info.icon);// 图标
					appInfoData.setAppicon(icon);
					}
				if (info.labelRes != 0) {
					String neme = (String) res.getText(info.labelRes);// 名字
					appInfoData.setAppname(neme);
				}else {
					String apkName=apkFile.getName();
					appInfoData.setAppname(apkName.substring(0,apkName.lastIndexOf(".")));
				}
				String pkgName = info.packageName;// 包名			
				appInfoData.setApppackage(pkgName);
			}else {
				return null;
			}			
			PackageManager pm = ctx.getPackageManager();
			PackageInfo packageInfo = pm.getPackageArchiveInfo(apkPath, PackageManager.GET_ACTIVITIES);
			if (packageInfo != null) {
				appInfoData.setAppversion(packageInfo.versionName);//版本号
				appInfoData.setAppversionCode(packageInfo.versionCode+"");//版本码
			}
			return appInfoData;
		} catch (Exception e) {	
			e.printStackTrace();
		}
		return null;
	}

分享到:
评论

相关推荐

    SD Maid Pro 4.13.4.apk

    您的SD卡正在收集您无法识别的文件和目录。 让我们不要再去了...... 为什么不让一个女仆来清理它? SD Maid将帮助您保持设备整洁,干净整洁:-)! 试一试,你找不到更彻底的清洁工具! 选择一个选项卡,按开始,然后...

    RE浏览器(Root Explorer) v3.1.6.zip

    - 显示图像缩略图,显示APK文件的图标,快速搜索文件 - 网络(SMB)、Google云端硬盘、Box、Dropbox支持 - 可在后台同时处理多个操作,显示隐藏文件和文件夹 - 设置特定文件类型的打开方式(相当于文件关联) RE...

    Screen Recorder Pro 1.0.5.apk

    SCR Screen Recorder Pro是一款手机...一种是锁屏,锁屏后等待2秒,录像文件会自动保存到SD卡,另外一种是重新打开一次SCR Screen Recorder; -录像视频文件保存在/sdcard/ScreenRecorder/目录中,文件格式默认是mp4

    Tasker_Pro_v5.9.2_beta3.apk

    显示:关闭/打开/解锁,文件关闭/删除/修改/移动/打开/属性已更改,相机/搜索按钮长按,已安装/已卸下/未安装卡,手势,未接电话,更改电话,接收到的文本,SMS发送成功/失败,电池已更换/满/低/过热,设备启动,...

    Tasker Pro 5.7.0.apk

    显示:关/开/解锁,文件关闭/删除/修改/移动/打开/属性更改,相机/搜索按钮长按,卡安装/卸下/未安装,手势,未接来电,电话更改,接收文本,短信发送成功/失败,电池更换/完全/低/过热,设备启动,设备关闭,存储低...

    Advanced_Download_Manager_Pro_v8.2_Build_80222.apk

    –从SD卡上的文本文件导入链接列表; –错误和连接中断后自动恢复; –计划在适当的时间开始下载; –加速模式,加快下载速度; –获取文件的大小和漂亮的名字; –下载和设置的备份列表; –每种连接类型的...

    3C_All-in-One_Toolbox_Pro_v2.2e.apk

    ★系统管理员*使用build.prop和sysctl编辑器,从SD卡性能,内存提升和微调各种隐藏设置的最低级别配置设备。 ★监视和记录所有应用程序活动和电池消耗,组件状态(连接,本地化和电话)。还允许使用图形添加状态...

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--android 获取sd卡状态 |--android 设置apn |--android 调节屏幕亮度 |--android 资源uri |--android 还原短信 |--android 重启 |--android中anim文件特效 |--app信息menifest获取(如版本号) |--AsyncQueryHandler...

    Android 开发技巧

    9.45、获取SD卡的路径和存储空间 268 9.46、将程序安装到SD卡 268 9.47、创建一个SD映像 269 9.48、查看手机内存存储 269 9.49、在模拟器上调试GOOGLE MAPS 271 9.50、建立GPRS连接 273 9.51、获取手机位置 274 9.5*...

    Android开发资料合集-World版!

    9.45、获取SD卡的路径和存储空间 268 9.46、将程序安装到SD卡 268 9.47、创建一个SD映像 269 9.48、查看手机内存存储 269 9.49、在模拟器上调试GOOGLE MAPS 271 9.50、建立GPRS连接 273 9.51、获取手机位置 274 9.5*...

    Google Android SDK开发范例大全(第3版) 1/5

    3.26 指定安装应用程序迁移至SD卡 3.27 手机动态Layout主题随手势物换迁移 第4章 史上超豪华的手机控件 4.1 EditText与TextView共舞 4.2 设计具有背景图的按钮 4.3 给圣诞老人的信息 4.4 我同意条款 4.5 消费券采购...

    Google Android SDK开发范例大全(第3版) 4/5

    3.26 指定安装应用程序迁移至SD卡 3.27 手机动态Layout主题随手势物换迁移 第4章 史上超豪华的手机控件 4.1 EditText与TextView共舞 4.2 设计具有背景图的按钮 4.3 给圣诞老人的信息 4.4 我同意条款 4.5 消费券采购...

    Google Android SDK开发范例大全(第3版) 3/5

    3.26 指定安装应用程序迁移至SD卡 3.27 手机动态Layout主题随手势物换迁移 第4章 史上超豪华的手机控件 4.1 EditText与TextView共舞 4.2 设计具有背景图的按钮 4.3 给圣诞老人的信息 4.4 我同意条款 4.5 消费券采购...

    Google Android SDK开发范例大全(第3版) 5/5

    3.26 指定安装应用程序迁移至SD卡 3.27 手机动态Layout主题随手势物换迁移 第4章 史上超豪华的手机控件 4.1 EditText与TextView共舞 4.2 设计具有背景图的按钮 4.3 给圣诞老人的信息 4.4 我同意条款 4.5 消费券采购...

    Google Android SDK开发范例大全(第3版)part2

     3.26 指定安装应用程序迁移至SD卡  3.27 手机动态Layout主题随手势物换迁移  第4章 史上超豪华的手机控件  4.1 EditText与TextView共舞  4.2 设计具有背景图的按钮  4.3 给圣诞老人的信息  4.4 我同意...

    《Google Android SDK开发范例大全(第3版)》.pdf

    3.26 指定安装应用程序迁移至sd卡 78 3.27 手机动态layout主题随手势物换迁移 79 第4章 史上超豪华的手机控件 84 4.1 edittext与textview共舞 85 4.2 设计具有背景图的按钮 86 4.3 给圣诞老人的信息...

    google android sdk开发范例大全 第二版 PDF 光盘代码

    google android sdk开发范例大全 第二版 PDF 和 随书光盘代码 ISBN:9787115229649 目录 第1章 了解、深入、动手做   1.1 红透半边天的Android  ... A.3 上传*.apk程序到Android Market上 

    新版Android开发教程.rar

    MicroSD 卡 ; QWERTY 全键盘; 310 万像素摄像头。 流媒体 支持视频格式: H.264 、流媒体、 3GPP 、 MPEG4 和 Codec 3GP ;支持音频格式: MP3 、 AAC 、 AAC+ 、 W MA 、 MPEG4 、 WAV 、 MIDI 、 REAL 、 AUDIO ...

    精通ANDROID 3(中文版)1/2

    19.3.7 为整个SD卡触发MediaScanner  19.3.8 参考资料  19.4 小结  第20章 使用OpenGL进行3D图形编程  20.1 了解OpenGL的历史和背景  20.1.1 OpenGL ES  20.1.2 OpenGL ES与Java ME  20.1.3 M3G:另...

Global site tag (gtag.js) - Google Analytics