настроить намерения Android через config.xml в приложении phonegap

Я разрабатываю телефонную связь и хотел бы использовать намерения для Android. Когда я добавляю следующее в AndroidManifest.xml (внутри платформ/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, а через config.xml в разделе www/, поскольку, насколько я понимаю, файл 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.


person Riesling    schedule 17.11.2014    source источник


Ответы (3)


В более старых версиях Cordova 3 сохранялись обновления androidmanifest.xml. У меня начались сюрпризы с версией 3.5, когда они добавили больше опций с тегом предпочтений.

Например, раньше я настраивал AndroidLaunchMode, обновляя AndroidManifest.xml, а теперь они добавили возможность разрешить эту конфигурацию в config.xml, благодаря чему после обновления Cordova cli моя настройка исчезла, пока я не понял, что происходит.

На данный момент cordova prepare android не удалит ваш фильтр намерений, так что это означает, что с текущей сборкой Cordova вы потеряете свои изменения только в том случае, если вы удалите платформу Android или обновитесь до более новой версии Android Cordova, которая позволит такую ​​​​конфигурацию.

Если вы хотите быть уверены, что не потеряете этот параметр, вы можете написать хук в post-prepare для обновления AndroidManifest.xml.

Или вы можете создать плагин, который будет обновлять только AndroidManifest.xml (синтаксис конфигурационного файла, который вы пытаетесь использовать, больше похож на синтаксис plugin.xml).

person QuickFix    schedule 17.11.2014
comment
спасибо, написание ловушки — это именно то, что я сделал в качестве обходного пути, я думаю, сейчас это просто невозможно сделать через config.xml - person Riesling; 18.11.2014
comment
Любое обновление по этому поводу для Cordova 6.0? Все еще пытаюсь найти правильный синтаксис, но пока безрезультатно - person Alexandre Bourlier; 30.03.2016

Я столкнулся с точно такой же проблемой. Мне пришлось использовать хуки в качестве обходного пути, мне никогда не удавалось получить это правильно из самого файла config.xml.

Я задокументировал свои действия в этом ответе. Надеюсь, это поможет !

person Alexandre Bourlier    schedule 30.03.2016

Мне удалось заставить это работать, добавив необходимые записи в файл 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), вы увидите его как <intent-filter>, на который ссылается атрибут android:name="com.darryncampbell.cordova.plugin.intent.ACTION".

Добавьте новый фильтр намерений непосредственно под этим фильтром.

Недостатком этого подхода является то, что вам, вероятно, придется повторно вводить данные, если вы переустанавливаете плагин. Однако я не смог заставить его работать, добавив записи в config.xml.

person strttn    schedule 31.07.2018