通过phonegap应用程序中的config.xml配置android意图

时间:2014-11-17 16:06:31

标签: android cordova webintents

我正在开发一个phonegap,并希望使用Intent for android。当我将以下内容添加到AndroidManifest.xml(在platforms / android中)时,它就像预期的那样工作。

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="http" />
    <data android:scheme="https" />
    <data android:host="*mysite.com" />
    <data android:host="*mysite.de" />
</intent-filter>

现在我想知道如何配置这不是通过AndroidManifest.xml而是通过www /下的config.xml配置,因为据我所知,在构建过程中可能会覆盖AndroidManifest.xml文件,而config.xml是像这样的东西的正确的地方。我尝试了以下(包括各种变化):

<platform name="android">
    <config-file target="AndroidManifest.xml" parent="/manifest/application/activity">
         <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="http" />
            <data android:scheme="https" />
            <data android:host="*mysite.de" />
            <data android:host="*mysite.com" />
        </intent-filter>
    </config-file>
</platform>

...遗憾的是,这总会导致以下错误:

 [echo] ----------
 [echo] Handling Resources...
 [aapt] Found modified input file
 [aapt] Generating resource IDs...
 [aapt] /home/.../platforms/android/res/xml/config.xml:30: error: Error parsing XML: unbound prefix

感谢任何想法,我在网上搜索了一个多小时。

我的手机版本是3.5.0-0.21.18

3 个答案:

答案 0 :(得分:2)

对于旧版本的cordova 3,保留了androidmanifest.xml更新。当他们使用首选项标签添加更多选项时,我开始对版本3.5感到意外。

例如,我曾经通过更新AndroidManifest.xml来配置AndroidLaunchMode,现在他们添加了一个选项,允许在config.xml中进行此配置,这使得在升级cordova cli之后,我的设置消失了,直到我意识到发生了什么。 / p>

目前,cordova prepare android不会删除你的意图过滤器,这意味着使用当前构建的cordova,只有当你删除了android平台或升级到更新的cordova android时,你才会失去你的更改。允许这样的配置。

如果你想确保不要松开这个设置,你可以在准备后更新AndroidManifest.xml时编写一个钩子。

或者您可以创建一个只更新AndroidManifest.xml的插件(您尝试使用的配置文件语法似乎是更多的plugin.xml语法)。

答案 1 :(得分:0)

我遇到了同样的问题。我不得不使用钩子作为一种解决方法,从来没有设法从config.xml文件本身做到正确。

我记录了我在this anwser中所做的事情。我希望这有帮助!

答案 2 :(得分:0)

我设法通过在用于网络意图插件的plugin.xml文件中添加必要的条目来使其工作。

即添加此:

<intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="http" />
        <data android:scheme="https" />
        <data android:host="*mysite.de" />
        <data android:host="*mysite.com" />
    </intent-filter>

此文件:

/plugins/com-darryncampbell-cordova-plugin-intent/plugin.xml

在安装插件时,您应该已经添加了一个“ <intent-filter>”标签。如果您使用的是darryncampbell的插件(这是Ionic目前用于Webintent的“官方”插件),那么您会看到它是<intent-filter>,并被属性android:name="com.darryncampbell.cordova.plugin.intent.ACTION"引用。

在该意图过滤器的正下方添加新的意图过滤器。

这种方法的缺点是,如果您重新安装插件,则可能需要重新输入详细信息。我无法通过在config.xml中添加条目来使其正常工作。