2017-02-20 29 views
0

Я работаю со строками и хочу захватить дополнительные ссылки на основе варианта. Я хочу, чтобы все варианты, чтобы захватить ссылки от хозяина один, так что я объявил intent-filter в моем основном AndroidManifest.xml файле следующим образом:Android-соединение с несколькими хост-фильтрами и манифестное слияние не работает

<activity android:name=".activity.DeepLinkActivity" 
android:noHistory="true"> 
    <intent-filter android:autoVerify="true"> 
    <action android:name="android.intent.action.VIEW"/> 
    <category android:name="android.intent.category.BROWSABLE"/> 
    <category android:name="android.intent.category.DEFAULT"/> 

    <data android:host="hostOne.com" android:path="/page.aspx" android:scheme="http"/> 

    </intent-filter> 
</activity> 

Я также генерирование частичного манифеста для других вариантов, таких как hostTwo.com как так:

<?xml version="1.0" encoding="UTF-8"?><manifest package="com.package.my.domain"> 
    <application xmlns:android="http://schemas.android.com/apk/res/android" android:name="AlarmMobile"> 
    <activity android:name=".activity.DeepLinkActivity"> 
     <intent-filter android:autoVerify="true"> 
     <action android:name="android.intent.action.VIEW"/> 
     <category android:name="android.intent.category.BROWSABLE"/> 
     <category android:name="android.intent.category.DEFAULT"/> 
     <data android:scheme="http://" android:host="hostTwo.com" android:path="/page.aspx"/> 
     </intent-filter> 
    </activity> 
    </application> 
</manifest> 

Он помещен в соответствующем названии папки в соответствии с вариантом (based upon the documentation here) сборки и слился манифест зрения Android студии показывает, что intent-filter для хозяина два добавлен окончательным слит манифест, однако, эмулятор или фактическое устройство не захватить намерения, предназначенные для второй хост.

Я генерации намерения как и в командной строке:

adb shell am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d "http://hostone.com/page.aspx" 

, который работает для hostone, но делать

запустит браузер, потому что приложение не сможет захватить его.

Ссылки на приложения для Android работают только для одного имени хоста? Есть ли что-нибудь еще, что я могу попробовать?

+0

Проверьте сгенерированный AndroidManifest файл (открыть файл APK в Android Studio) –

+0

'хост = "hostOne.com"' ' хост = "hostTwo"' Может ли эта небольшая разница быть проблемой? (Вы пропустите .com) В моем случае я использую один фильтр намерений с двумя для разных хостов. – Michael

+0

@ Майкл, это была ошибка с моей стороны, когда я редактировал фактические сайты, используемые :) Если положить все теги данных в одно объявление-декларации намерения, я мог бы отказаться от этого в частичном манифесте, но я бы скорее не так, мне не нужно генерировать один для каждого сочетания аромата/варианта –

ответ

0

Я выяснил, что частичный манифест был неправильным. В теге intent-filterdata, android:scheme="http://" недействителен в связи с завершающим ://.

Согласно google's documentation, Android строит UTC intent-filter так: <scheme>://<host>:<port>/<path> поэтому включение его в декларацию не нужно.

После изменения моего объявления на android:scheme="http" слияние продолжает быть успешным, и ОС пытается проверить ссылки, определенные в частичном манифесте!

Исправлено частичное манифеста:

<?xml version="1.0" encoding="UTF-8"?><manifest package="com.package.my.domain"> 
    <application xmlns:android="http://schemas.android.com/apk/res/android" android:name="AlarmMobile"> 
    <activity android:name=".activity.DeepLinkActivity"> 
     <intent-filter android:autoVerify="true"> 
     <action android:name="android.intent.action.VIEW"/> 
     <category android:name="android.intent.category.BROWSABLE"/> 
     <category android:name="android.intent.category.DEFAULT"/> 
     <data android:scheme="http" android:host="hostTwo.com" android:path="/page.aspx"/> 
     </intent-filter> 
    </activity> 
    </application> 
</manifest>