wfa*_*ulk 6 xml android android-manifest
我正在尝试编写一个Android 2.2应用程序,它将找到可以移动到SD卡的已安装应用程序.执行此操作的权限在AndroidManifest.xml文件中编码为根级属性" android:installLocation ". PackageInfo似乎有一个除了这个属性的所有东西的接口.我可以打开已安装的apk并解压AndroidManifest.xml文件,但它似乎采用了一些二进制编码格式,一些随机互联网用户已经编写了解码器,但这似乎是一项非常多的工作.
是否有我缺少的界面?
wfa*_*ulk 12
事实证明,虽然没有直接的API调用来获取installLocation,但我也不必手动解析二进制XML,因为提供的XmlResourceParser工作就可以了.
// Experimentally determined
private static final int auto = 0;
private static final int internalOnly = 1;
private static final int preferExternal = 2;
AssetManager am = createPackageContext(packageName, 0).getAssets();
XmlResourceParser xml = am.openXmlResourceParser("AndroidManifest.xml");
int eventType = xml.getEventType();
xmlloop:
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_TAG:
if (! xml.getName().matches("manifest")) {
break xmlloop;
} else {
attrloop:
for (int j = 0; j < xml.getAttributeCount(); j++) {
if (xml.getAttributeName(j).matches("installLocation")) {
switch (Integer.parseInt(xml.getAttributeValue(j))) {
case auto:
// Do stuff
break;
case internalOnly:
// Do stuff
break;
case preferExternal:
// Do stuff
break;
default:
// Shouldn't happen
// Do stuff
break;
}
break attrloop;
}
}
}
break;
}
eventType = xml.nextToken();
}
Run Code Online (Sandbox Code Playgroud)
呃,我想那里switch有一个case应该只是一个if.那好吧.你明白了.
| 归档时间: |
|
| 查看次数: |
2532 次 |
| 最近记录: |