Pergunta

Eu gostaria de poder solicitar meu aplicativo a abrir um link quando o usuário clicar em um URL de um determinado padrão em vez de permitir que o navegador o abra. Pode ser que o usuário esteja em uma página da Web no navegador ou em um cliente de email ou em uma Webview em um aplicativo recém-criado.

Por exemplo, clique em um link do YouTube de qualquer lugar do telefone e você terá a chance de abrir o aplicativo do YouTube.

Como faço para conseguir isso para o meu próprio aplicativo?

Foi útil?

Solução

Use um android.intent.action.View da categoria Android.Intent.category.browsable.

Do cara de Romain Photostream App's Androidmanifest.xml,

    <activity
        android:name=".PhotostreamActivity"
        android:label="@string/application_name">

        <!-- ... -->            

        <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="http"
                  android:host="flickr.com"
                  android:pathPrefix="/photos/" />
            <data android:scheme="http"
                  android:host="www.flickr.com"
                  android:pathPrefix="/photos/" />
        </intent-filter>
    </activity>

Uma vez lá dentro você está no atividade, você precisa procurar a ação e depois fazer algo com o URL que recebeu. o Intent.getData() Método fornece um URI.

    final Intent intent = getIntent();
    final String action = intent.getAction();

    if (Intent.ACTION_VIEW.equals(action)) {
        final List<String> segments = intent.getData().getPathSegments();
        if (segments.size() > 1) {
            mUsername = segments.get(1);
        }
    }

Deve -se notar, no entanto, que este aplicativo está ficando um pouco desatualizado (1.2), para que você possa descobrir que existem maneiras melhores de conseguir isso.

Outras dicas

Existem alguns parâmetros de análise de bibliotecas da URL automaticamente.

tal como

https://github.com/airbnb/deeplinkdispatch

&&

https://github.com/mzule/activityRouter

O mais tarde é escrito por mim. Que podem analisar parâmetros ao tipo determinado, nem sempre string.

Exemplo

@Router(value = "main/:id" intExtra = "id")
...
int id = getIntent().getInt("id", 0);
private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        setUrlparams(url);

        if (url.indexOf("pattern") != -1) {
            // do something
            return false;
        } else {
            view.loadUrl(url);
        }

        return true;
    }

}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top