Android responder ao URL na intenção

152

Quero que minha intenção seja lançada quando o usuário acessar um determinado URL: por exemplo, o Android Market faz isso com http://market.android.com/ urls. o mesmo acontece com o youtube. Eu quero que os meus também façam isso.

Isaac Waller
fonte
8
Há uma ótima resposta para esta pergunta em stackoverflow.com/questions/2448213/…
neu242
2
Existe uma resposta melhor para esta pergunta stackoverflow.com/questions/1609573/…
rds

Respostas:

192

Eu fiz isso! Usando <intent-filter>. Coloque o seguinte no seu arquivo de manifesto:

<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.youtube.com" android:scheme="http" />
</intent-filter>

Isso funciona perfeitamente!

Isaac Waller
fonte
9
Isso não funciona para mim. Você pode dar um exemplo de link que abriria o aplicativo.
Pascal Klein
7
Gostaria de reagir a "www.youtube.com", mas NÃO a "www.youtube.com/fr /" ... Alguma idéia de como posso fazer isso?
Gilbou 28/10
1
Não tenho certeza de como isso está funcionando para o mundo inteiro. Apenas não funciona no chrome e sempre abre o link no navegador até você colocar o elemento "android: pathPrefix". De qualquer forma, a resposta não possui os valores de categoria mencionados na documentação. Se ainda não funcionar para alguém, consulte isso por favor: stackoverflow.com/a/21727055/2695276 PS: lutou durante dias por isso.
Rajat Sharma
1
É importante saber que isso só funciona se você abrir o link fora de um navegador, a partir do app notas, ou uma mensagem de WhatsApp, ele está trabalhando em pirulito
D4rWiNS
10

Pode ser necessário adicionar permutações diferentes ao seu filtro de intenção para que ele funcione em diferentes casos (http / https / ect).

Por exemplo, tive que fazer o seguinte para um aplicativo que seria aberto quando o usuário abrisse um link para os formulários do Google Drive, www.docs.google.com/forms

Observe que o prefixo do caminho é opcional.

        <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="docs.google.com"
                android:pathPrefix="/forms"/>
            <data
                android:scheme="http"
                android:host="www.docs.google.com"
                android:pathPrefix="/forms" />

            <data
                android:scheme="https"
                android:host="www.docs.google.com"
                android:pathPrefix="/forms" />

            <data
                android:scheme="https"
                android:host="docs.google.com"
                android:pathPrefix="/forms" />
        </intent-filter>
Jordan Réjaud
fonte