加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml – 访问android:installLocation清单属性

发布时间:2020-12-16 07:58:55 所属栏目:百科 来源:网络整理
导读:我正在尝试编写一个Android 2.2应用程序,它将找到可以移动到SD卡的已安装应用程序.执行此操作的权限在 AndroidManifest.xml文件中编码为根级别属性“ android:installLocation”. PackageInfo似乎有一个除了这个属性的所有东西的接口.我可以打开已安装的apk
我正在尝试编写一个Android 2.2应用程序,它将找到可以移动到SD卡的已安装应用程序.执行此操作的权限在 AndroidManifest.xml文件中编码为根级别属性“ android:installLocation”. PackageInfo似乎有一个除了这个属性的所有东西的接口.我可以打开已安装的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();
    }

呃,我想那里有一个开关,有一个应该只是一个if.好吧.你明白了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读