Digamos que eu queira definir que um URI, como:
myapp://path/to/what/i/want?d=This%20is%20a%20test
deve ser tratado por meu próprio aplicativo ou serviço. Observe que o esquema é "myapp"
e não "http"
, ou "ftp"
. É exatamente isso que pretendo: definir meu próprio esquema de URI globalmente para o sistema operacional Android. Isso é possível?
Isso é algo análogo ao que alguns programas já fazem em, por exemplo, sistemas Windows, como Skype ( skype://
) ou qualquer programa de download torrent ( torrent://
).
android
android-intent
browser
uri
intentfilter
punnie
fonte
fonte
Respostas:
Isto é muito possível; você define o esquema de URI no seu AndroidManifest.xml, usando o
<data>
elemento Você configura um filtro de intenção com o<data>
elemento preenchido e poderá criar seu próprio esquema. ( Mais sobre filtros de intenção e resolução de intenção aqui .)Aqui está um pequeno exemplo:
Conforme a intenção implícita funciona, você precisa definir pelo menos uma ação e uma categoria; aqui escolhi VIEW como a ação (embora possa ser qualquer coisa) e certifique-se de adicionar a categoria DEFAULT (pois isso é necessário para todas as intenções implícitas). Observe também como eu adicionei a categoria BROWSABLE - isso não é necessário, mas permitirá que seus URIs possam ser abertos no navegador (um recurso bacana).
fonte
Complementando a resposta @DanielLew , para obter os valores dos parâmetros, você deve fazer isso:
Exemplo de URI:
myapp://path/to/what/i/want?keyOne=valueOne&keyTwo=valueTwo
na sua atividade:
fonte
http://www.host.com/directory/value
? Como podemos conseguir issovalue
?uri.getLastPathSegment();
Eu recomendo fortemente que você não defina seu próprio esquema. Isso contraria os padrões da Web para esquemas de URI, que tentam controlar rigidamente esses nomes por um bom motivo - para evitar conflitos de nomes entre diferentes entidades. Depois de colocar um link para seu esquema em um site, você coloca esse pequeno nome em todo o espaço de nomes da Internet e deve seguir esses padrões.
Se você quiser ter um link para seu próprio aplicativo, recomendo que você siga a abordagem descrita aqui:
Como registrar algum espaço para nome de URL (myapp: //app.start/) para acessar seu programa chamando uma URL no navegador no sistema operacional Android?
fonte
Outra abordagem alternativa ao Diego's é usar uma biblioteca:
https://github.com/airbnb/DeepLinkDispatch
Você pode declarar facilmente os URIs que deseja manipular e os parâmetros que deseja extrair por meio de anotações na Atividade, como:
Além disso, os parâmetros de consulta também serão transmitidos para a Atividade.
fonte
Como a pergunta é feita anos atrás, o Android evoluiu muito nesse esquema de URI.
Do esquema URI original, ao link direto, e agora Links para aplicativos do Android.
O Android agora recomenda usar URLs HTTP, não definir seu próprio esquema de URI. Como os Links de aplicativos para Android usam URLs HTTP vinculados a um domínio de seu site, nenhum outro aplicativo pode usar seus links. Você pode verificar a comparação entre links diretos e aplicativos Android a partir daqui
Agora você pode adicionar facilmente um esquema de URI usando a opção Android Studio: Ferramentas> Assistente de links para aplicativos. Consulte os detalhes no documento do Android: https://developer.android.com/studio/write/app-link-indexing.html
fonte