当前位置: 编程技术>移动开发
本页文章导读:
▪怎么制作一款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等,的主要代码如下:
icon就是这个APK的图标,appName就是这个apk的名称,packageName就是这个apk的包名。
2.下面是如何获取所有的已经安装的非系统app的代码:
其中的
作用是过滤掉system app。
如果需要整个Application源码的可以发邮件到bear.huangzhen@gmail.com索取。
今天研究了一下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上,前面还加上了小编什么的,嫣然一副他们自己写的!哎...
最新技术文章: