Ответ 1
используйте эти три в своем <intent filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
У меня есть приложение для 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>
По-прежнему нет. Я не уверен, что перенаправление имеет отношение, хотя браузер явно сначала переходит на сайт без перенаправления, а затем перенаправляется на страницу входа в систему, но ни в коем случае я не могу выбрать его, чтобы открыть его в своем приложении. Кроме того, если я сначала зарегистрирую браузер в браузере, перенаправления не будет, и он все равно не работает.
Я пропустил что-то очевидное здесь? Я вытаскиваю свои волосы, почему это не работает, и я не могу отлаживать его, не пытаясь использовать все возможные комбинации, о которых я мог думать (я сделал...). Спасибо за любую помощь!
используйте эти три в своем <intent filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
Я думал, что опубликую это здесь, так как я потратил некоторое время на то, чтобы выяснить, почему мой фильтр намерений не работает. Оказывается, он работал все время, но спички точны. Таким образом, если вы зарегистрируете свое намерение для 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>
@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);