Android Как создать пользовательскую схему URL с заданным форматом myapp: / / http://

Я исследовал большую часть пользовательской схемы URL Q&A, и я не нашел своего возможного ответа.

Я хочу, чтобы мое приложение было запущено, щелкнув определенный URL-адрес в браузере (любой на мобильном устройстве), дело в том, что мой данный URL-адрес не может быть изменен, поскольку он также обслуживает приложение IOS, и это выглядит так:

" myapp://http://www.name.com/path/path2/"

Я не уверен, как обрабатывать "myapp:// http: / /" и построить правильный фильтр намерений, и все, что я пробовал, не работает. Любая помощь будет оценена, и если я пропустил соответствующий ответ, пожалуйста, кроме моих извинений.

Это то что я пробовал :

      <activity
        android:name="com.myapp.test.SplashScreen"
        android:exported="true"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <!-- Test for URL scheme -->
        <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:host="www.name.com"
                android:path="/path/path2/"
                android:scheme="http" />
            <data
                android:host="www.name.com"
                android:path="/path/path2/"
                android:scheme="https" />

            <data android:scheme="myapp" />
        </intent-filter>
        <!-- End Test for URL scheme -->
    </activity>

Примечание: я пробовал с / без экспортированного: true

3 ответов


поскольку CommonsWare сказал, что данный URI мне нужен для создания схемы, не является допустимым URI, поэтому схема не работает, и приложение не запускается. После этого объяснения ребята на стороне сервера были убеждены изменить URI на myapp://... и это сработало, как по волшебству :).

действие выглядит так:

 <activity
    android:name="com.myapp.test.SplashScreen"
    android:exported="true"
    android:label="@string/app_name"
    android:screenOrientation="portrait"
    android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

    <!-- Test for URL scheme -->
    <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>
    <!-- End Test for URL scheme -->
</activity>

это неправильное использование схемы URI и недопустимо. URL HTTP, который вы хотите передать, является частью данных и, следовательно, должен быть отправлен в строке запроса.

myapp://somehost/action?url=http%3A%2F%2Fwww.name.com%2Fpath%2Fpath2%2F

вам нужно использовать гиперссылку для запуска приложения . например, вы устанавливаете scheme= "yourpackagename", вам нужно установить гиперссылку следующим образом: yourpackagename://host, и вы должны вист гиперссылку на вас moble browser .Если у вас нет host lable, просто удалите его.

<!-- Test for URL scheme -->
<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:host="host" android:scheme="yourpackagename" />
</intent-filter>
<!-- End Test for URL scheme -->

Если ваша деятельность имеет более одной схемы, вы должны использовать 2 или более, чтобы указать его