Подтвердить что ты не робот

Откройте приложение Android из URL-адреса, не используя рабочий фильтр

У меня есть приложение для Android, которое люди используют в качестве замены для веб-сайта. Следовательно, когда пользователи сталкиваются с URL-адресом на веб-сайте, я хочу дать им возможность "открыть URL-адрес" в моем приложении, а не в браузере. Другими словами, я хочу, чтобы появилось всплывающее окно, которое позволяет им выбирать между моим приложением и браузером (и, возможно, другими приложениями).

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

Этот веб-сайт http://members.iracing.com, поэтому я добавил следующий фильтр намерений:

    <activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main" >
        <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" />
            <data android:scheme="http" />
            <data android:host="members.iracing.com" />
        </intent-filter>
    </activity>

Я пробовал различные формы этих фильтров данных, например, используя один "data" node с обоими атрибутами:

        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="http" android:host="members.iracing.com"/>
        </intent-filter>

Это просто не работает. Я не знаю, что еще тебе сказать. Я размещал простую HTML-страницу на своем веб-сайте с двумя ссылками на разные страницы этого веб-сайта (все начиная с "http://members.iracing.com/..." ), и когда я нажимаю на любую из них, они просто открывают в браузере, даже не спрашивая, какое приложение я хочу использовать. Я попробовал это как на эмуляторе, так и после установки приложения на моем физическом устройстве, ничего не работает. Я попробовал это в совершенно BLANK, новом Android-проекте, чтобы убедиться, что это сработает, ничего.

Затем я понял, что для веб-сайта требуется аутентификация, и если вы не вошли в систему, он перенаправляется на страницу входа в https://members.iracing.com/membersite/login.jsp, поэтому я попытался заменить схему по "https". Я даже попытался изменить хост на "www.members.iracing.com", и в конце концов я даже попробовал комбинацию из всех этих вещей (не уверен, что это сработает, но эй, я в отчаянии на этом этапе....)

       <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="http" />
            <data android:scheme="https" />
            <data android:host="members.iracing.com" />
            <data android:host="www.members.iracing.com" />
        </intent-filter>

По-прежнему нет. Я не уверен, что перенаправление имеет отношение, хотя браузер явно сначала переходит на сайт без перенаправления, а затем перенаправляется на страницу входа в систему, но ни в коем случае я не могу выбрать его, чтобы открыть его в своем приложении. Кроме того, если я сначала зарегистрирую браузер в браузере, перенаправления не будет, и он все равно не работает.

Я пропустил что-то очевидное здесь? Я вытаскиваю свои волосы, почему это не работает, и я не могу отлаживать его, не пытаясь использовать все возможные комбинации, о которых я мог думать (я сделал...). Спасибо за любую помощь!

4b9b3361

Ответ 1

используйте эти три в своем <intent filter>

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

Ответ 2

Я думал, что опубликую это здесь, так как я потратил некоторое время на то, чтобы выяснить, почему мой фильтр намерений не работает. Оказывается, он работал все время, но спички точны. Таким образом, если вы зарегистрируете свое намерение для http://myexample.com, и вы нажмете http://myexample.com/blah это не сработает.

Добавление следующей исправленной проблемы:

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

Итак, фильтр намерений выглядит так:

<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="example.com" />
            <data android:scheme="https" />
            <data android:pathPattern="/.*" />
</intent-filter>

Ответ 3

@nurieta, ваш ответ сделал трюк за меня, спасибо!

Одно из советов, поскольку я имею дело с потенциальными строками запроса, я обработал его через немного кода в .java, чтобы определить, нужно ли просто открывать приложение или отправлять вас в определенное место в приложении. Мое приложение - это просто WebView, в котором работает мобильное приложение JQuery.

    if(getIntent().getData()!=null){//check if intent is not null
        Uri data = getIntent().getData();//set a variable for the Intent
        String scheme = data.getScheme();//get the scheme (http,https)
        String fullPath = data.getEncodedSchemeSpecificPart();//get the full path -scheme - fragments

        combine = scheme+"://"+fullPath; //combine to get a full URI
    }

    String url = null;//declare variable to hold final URL
    if(combine!=null){//if combine variable is not empty then navigate to that full path
        url = combine;
    }
    else{//else open main page
        url = "http://www.example.com";
    }
    webView.load(url);