xml - 访问安卓 :installLocation manifest attribute

标签 xml android android-manifest

我正在尝试编写一个 Android 2.2 应用程序,它将找到可以移动到 SD 卡的已安装应用程序。执行此操作的权限编码在 AndroidManifest.xml 中文件作为根级属性“android:installLocation”。 PackageInfo似乎对除此属性之外的所有内容都有接口(interface)。我可以打开已安装的 apk 并提取 AndroidManifest.xml 文件,但它似乎是某种二进制编码格式,一些随机的互联网用户为此编写了解码器,但这似乎是一项非常多的工作。

是否有我缺少的界面?

最佳答案

事实证明,虽然没有直接的 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();
    }

呃,我想那里有一个 switch 和一个 case,它可能只是一个 if。那好吧。你明白了。

关于xml - 访问安卓 :installLocation manifest attribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3065219/

相关文章:

python - 使用 elementtree.find() 无法找到子叶子

java - 如何从java读取XML节点中的空白元素

android - 如何在 Android 的自定义 View 上保存实例状态?

java - 未解析的类 : Validates resource reference inside Android XML files

android - 以编程方式创建工具栏并将其添加到 AppCompatActivity

python - 在 Python 中测试空 xml 文件

android - 如何通过将 FFMPEG lib 用于 android 来减小 mp4 大小

android - 使用 Android Picasso 将图像预加载到内存/磁盘中

android - 带有 intent-filter 参数的 pathPattern

java - Android 构建时代号一个 Dex 问题?