Объявление пользовательской схемы URL в манифесте, вызывающее дублирование приложения в диалоговом окне полного действия

Я хочу открыть диалог с глубокими ссылками в своем приложении, поэтому я определил следующее в манифесте:

<activity
android:name=".ActivityA"android:screenOrientation="portrait"android:theme="@style/AppBaseTheme"android:windowSoftInputMode="stateHidden|stateVisible" >
<intent-filter>
<data android:scheme="rentaldashboard" />
<data android:scheme="https" />
<data android:scheme="http" />
<data android:host="my.site.com" />

<data android:pathPattern=".*" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

<action android:name="android.intent.action.VIEW" />
</intent-filter>

    <activity
android:name=".ActitivtyB"android:screenOrientation="portrait"android:theme="@style/AppBaseTheme"android:windowSoftInputMode="stateHidden|stateVisible" >
<intent-filter>
<data android:scheme="rentalreset" />
<data android:scheme="https" />
<data android:scheme="http" />
<data android:host="my.site.com" />

<data android:pathPattern=".*" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

<action android:name="android.intent.action.VIEW" />
</intent-filter>
</activity>

ActivityA а также ActivityB используйте схему, и когда я запускаю код выше, он показывает диалог, как показано ниже:

Завершить действие с

В диалоговом окне дважды отображается логотип моего приложения. Я хочу, чтобы одновременно открывался только один логотип для обоих видов деятельности. Итак, есть идеи, как я могу сделать это возможным?

3

Решение

Если у вас есть только частичные URL, как /user или же /news для деятельности А и /admin только для ActivityB, то вы должны улучшить свои фильтры пути. Между прочим, они должны начинаться с косой черты, и эти шаблоны не являются регулярными выражениями.

Если вы хотите поддерживать пользовательскую схему и URL-адрес http (s), вам следует использовать несколько фильтров намерений:

<activity
android:name=".ActivityA"android:screenOrientation="portrait"android:theme="@style/AppBaseTheme"android:windowSoftInputMode="stateHidden|stateVisible" >
<intent-filter>
<data android:scheme="https" />
<data android:scheme="http" />
<data android:host="dev.worldofrental.com" />
<data android:host="www.worldofrental.com" />

<data android:pathPrefix="/urlredirect/getstarted" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<action android:name="android.intent.action.VIEW" />
</intent-filter>
<intent-filter>
<data android:scheme="your.package.name"android:host="getstarted" />

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

<activity
android:name=".ActitivtyB"android:screenOrientation="portrait"android:theme="@style/AppBaseTheme"android:windowSoftInputMode="stateHidden|stateVisible" >
<intent-filter>
<data android:scheme="https" />
<data android:scheme="http" />
<data android:host="dev.worldofrental.com" />
<data android:host="www.worldofrental.com" />

<data android:pathPrefix="/urlredirect/resetpassword" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<action android:name="android.intent.action.VIEW" />
</intent-filter>
<intent-filter>
<data android:scheme="your.package.name"android:host="resetpassword" />

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

В общем, я бы предложил использовать имя пакета в качестве схемы, чтобы убедиться, что никакие другие приложения не «украдут» ваши намерения.

1

Другие решения

Других решений пока нет …