Android - создайте схему для моего приложения, которое откроется из ссылки на веб-страницу

Я пытаюсь создать такую ​​схему, как myapp://somthing/anotherthing, которая, если веб-страница или любая другая ссылка приложения на эту схему откроет мое приложение.

Я добавил это в свой AndroidManifest.xml для своей основной деятельности:

    <activity
        android:name="com.example.MainActivity"
        android:label="@string/title_activity_main"
        android:configChanges="orientation"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Light.NoTitleBar" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="myapp" />
        </intent-filter>
    </activity>

но когда я нажимаю ссылку на веб-странице, ссылающейся на myapp://somthing/anotherthing, она просто дает мне страницу, не найденную тип ошибки и не открывающая мое приложение.

Всюду, где я смотрю, я вижу, что мне нужно добавить тег <data> внутри <intent-filter>. Что здесь отсутствует?

Ответ 1

Поиск примеров в других связанных вопросах я не мог найти, используя оба <action android:name="android.intent.action.MAIN" />  а также <action android:name="android.intent.action.VIEW" />  (последнее кажется обязательным для такого поведения).

Во всяком случае, можно использовать оба. Это мой рабочий пример:

<activity
        android:name="com.example.MainActivity"
        android:label="@string/title_activity_main"
        android:configChanges="orientation"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Light.NoTitleBar" android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="android.intent.action.VIEW" />

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

                <data android:scheme="myapp" />
            </intent-filter>
        </activity>

Итак, следующие тэги, похоже, делают трюк:

android:exported="true"
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

Это якорь, который я использую с веб-страницы:

<a href="myapp://somthing/anotherthing">Open the app!</a>

ОБНОВЛЕНИЕ: Как указано в комментариях к разработчику82, если вы это сделаете, значок приложения исчезнет, ​​и пользователь не сможет открыть приложение. Чтобы исправить это, вам нужно создать новый тег, чтобы поставить <data> вместе с default, browsable категориями и view действием.

Тег <activity> должен выглядеть следующим образом:

    <activity
            android:name="com.example.MainActivity"
            android:label="@string/title_activity_main"
            android:configChanges="orientation"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Light.NoTitleBar" android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <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="myapp" />
            </intent-filter>
            </activity>

Сообщите мне, помогло ли это!