当前位置:  编程技术>移动开发
本页文章导读:
    ▪怎么制作一款APK管理器        如何制作一款APK管理器 今天研究了一下APK管理器代码,发现还是比较简单的,主要就是两个列表,一个显示SD卡上面的APK文件的list,一个显示已经安装的app的list。1.获取SD卡上的APK安装文.........
    ▪ 电子优惠卷:爱惠客1.0公布了,支持麦当劳等多个商家        电子优惠卷:爱惠客1.0发布了,支持麦当劳等多个商家   多商家省钱利器-爱惠客来啦!爱惠客集合众多商家电子优惠券,直接展示,无需打印,即可享受到优惠美食。免去您打卷、带券的.........
    ▪ 非常气愤 声讨一上       非常气愤 声讨一下 博主于2011年4月17日发表了名为《获取Android手机中所有的短信》的文章。 没想到,刚刚在闲逛论坛时,竟然发现有人剽窃博主的代码,并声称是自己所写。 剽窃者发表代.........

[1]怎么制作一款APK管理器
    来源: 互联网  发布时间: 2014-02-18
如何制作一款APK管理器
今天研究了一下APK管理器代码,发现还是比较简单的,主要就是两个列表,一个显示SD卡上面的APK文件的list,一个显示已经安装的app的list。
1.获取SD卡上的APK安装文件后,要用代码读出APK里面的信息,如icon等,的主要代码如下:
private void getUninatllApkInfo(Context context, String apkPath) {
		String PATH_PackageParser = "android.content.pm.PackageParser";
		String PATH_AssetManager = "android.content.res.AssetManager";
		try {
			// apk包的文件路径
			// 这是一个Package 解释器, 是隐藏的
			// 构造函数的参数只有一个, apk文件的路径
			// PackageParser packageParser = new PackageParser(apkPath);
			Class pkgParserCls = Class.forName(PATH_PackageParser);
			Class[] typeArgs = new Class[1];
			typeArgs[0] = String.class;
			Constructor pkgParserCt = pkgParserCls.getConstructor(typeArgs);
			Object[] valueArgs = new Object[1];
			valueArgs[0] = apkPath;
			Object pkgParser = pkgParserCt.newInstance(valueArgs);
			Log.d("ANDROID_LAB", "pkgParser:" + pkgParser.toString());
			// 这个是与显示有关的, 里面涉及到一些像素显示等等, 我们使用默认的情况
			DisplayMetrics metrics = new DisplayMetrics();
			metrics.setToDefaults();
			typeArgs = new Class[4];
			typeArgs[0] = File.class;
			typeArgs[1] = String.class;
			typeArgs[2] = DisplayMetrics.class;
			typeArgs[3] = Integer.TYPE;
			Method pkgParser_parsePackageMtd = pkgParserCls.getDeclaredMethod(
					"parsePackage", typeArgs);
			valueArgs = new Object[4];
			valueArgs[0] = new File(apkPath);
			valueArgs[1] = apkPath;
			valueArgs[2] = metrics;
			valueArgs[3] = 0;
			Object pkgParserPkg = pkgParser_parsePackageMtd.invoke(pkgParser,
					valueArgs);
			// 应用程序信息包, 这个公开的, 不过有些函数, 变量没公开
			// ApplicationInfo info = mPkgInfo.applicationInfo;
			Field appInfoFld = pkgParserPkg.getClass().getDeclaredField(
					"applicationInfo");
			ApplicationInfo info = (ApplicationInfo) appInfoFld
					.get(pkgParserPkg);
			// uid 输出为"-1",原因是未安装,系统未分配其Uid。
			Log
					.d("ANDROID_LAB", "pkg:" + info.packageName + " uid="
							+ info.uid);
			Class assetMagCls = Class.forName(PATH_AssetManager);
			Constructor assetMagCt = assetMagCls.getConstructor((Class[]) null);
			Object assetMag = assetMagCt.newInstance((Object[]) null);
			typeArgs = new Class[1];
			typeArgs[0] = String.class;
			Method assetMag_addAssetPathMtd = assetMagCls.getDeclaredMethod(
					"addAssetPath", typeArgs);
			valueArgs = new Object[1];
			valueArgs[0] = apkPath;
			assetMag_addAssetPathMtd.invoke(assetMag, valueArgs);
			Resources res = context.getResources();
			typeArgs = new Class[3];
			typeArgs[0] = assetMag.getClass();
			typeArgs[1] = res.getDisplayMetrics().getClass();
			typeArgs[2] = res.getConfiguration().getClass();
			Constructor 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);
			CharSequence label = null;
			if (info.labelRes != 0) {
				label = res.getText(info.labelRes);
			}
			Log.d("ANDROID_LAB", "label=" + label);
			// 这里就是读取一个apk程序的图标
			if (info.icon != 0) {
				this.icon = res.getDrawable(info.icon);
				appName = label.toString();
				packageName = info.packageName;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}


icon就是这个APK的图标,appName就是这个apk的名称,packageName就是这个apk的包名。
2.下面是如何获取所有的已经安装的非系统app的代码:
private ArrayList<InstalledAppInfo> getInstalledApps() {
		ArrayList<InstalledAppInfo> res = new ArrayList<InstalledAppInfo>();
		List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);
		for (int i = 0; i < packs.size(); i++) {
			PackageInfo p = packs.get(i);
			if((p.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) > 0){
				continue;
			}

			InstalledAppInfo newInfo = new InstalledAppInfo();
			newInfo.setAppname(p.applicationInfo.loadLabel(getPackageManager())
					.toString());
			newInfo.setPname(p.packageName);
			newInfo.setVersionName(p.versionName);
			newInfo.setVersionCode(p.versionCode);
			newInfo.setIcon(p.applicationInfo.loadIcon(getPackageManager()));
			res.add(newInfo);
		}
		return res;
	}


其中的
if((p.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) > 0){
				continue;
			}

作用是过滤掉system app。


如果需要整个Application源码的可以发邮件到bear.huangzhen@gmail.com索取。
1 楼 hejinya 2012-02-28  
非常受用,正在做一个文件管理器,已经给你gmail邮箱发了一封邮件,可以提供下源码不,万分感谢

    
[2] 电子优惠卷:爱惠客1.0公布了,支持麦当劳等多个商家
    来源: 互联网  发布时间: 2014-02-18
电子优惠卷:爱惠客1.0发布了,支持麦当劳等多个商家

 


多商家省钱利器-爱惠客来啦!
爱惠客集合众多商家电子优惠券,直接展示,无需打印,即可享受到优惠美食。
免去您打卷、带券的烦恼! 支持自动更新,收藏,离线模式。
具有方便,环保,时尚,省流量等特点。更多商家动态添加中。
还等什么啦?赶快下载优惠吧。


 

 

 


 

我们是爱惠客的开发者,致力于为Android用户提供多商家的电子优惠券服务。

我们正在与KFC等商家洽谈,希望能够不断接入更多商家。

从而为Android机友谋取方便的优惠福利。

新版本正在努力开发中。请多多支持我们。


    
[3] 非常气愤 声讨一上
    来源: 互联网  发布时间: 2014-02-18
非常气愤 声讨一下

博主于2011年4月17日发表了名为《获取Android手机中所有的短信》的文章。

没想到,刚刚在闲逛论坛时,竟然发现有人剽窃博主的代码,并声称是自己所写。

剽窃者发表代码的网址:http://www.eoeandroid.com/forum-viewthread-tid-69892-extra-page%3D1%26orderby%3Ddateline.html

 

剽窃者没有改动博主的任何代码和文字说明,却声称是自己研究的结果,真不要脸。有图为证:

1 楼 gqdy365 2011-04-21  
我上次发表在这儿的文章也被转载到了eoe上,前面还加上了小编什么的,嫣然一副他们自己写的!哎...

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3