reusing - use custom toolbar android




Como implementar meu próprio esquema de URI no Android (3)

Digamos que eu queira definir um URI como:

myapp://path/to/what/i/want?d=This%20is%20a%20test

deve ser tratado pelo 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, por exemplo, sistemas Windows, como o Skype ( skype:// ) ou qualquer programa de download torrent:// ( torrent:// ).


Complementando a resposta @DanielLew , para obter os valores dos parâmetros, você precisa fazer isso:

Exemplo de URI: myapp://path/to/what/i/want?keyOne=valueOne&keyTwo=valueTwo

em sua atividade:

Intent intent = getIntent();
if (Intent.ACTION_VIEW.equals(intent.getAction())) {
  Uri uri = intent.getData();
  String valueOne = uri.getQueryParameter("keyOne");
  String valueTwo = uri.getQueryParameter("keyTwo");
}

Eu recomendo fortemente que você não defina seu próprio esquema. Isso vai contra os padrões da Web para esquemas de URI, que tenta controlar rigidamente esses nomes por um bom motivo - para evitar conflitos de nomes entre diferentes entidades. Depois de colocar um link para o seu esquema em um site, você colocou esse pequeno nome em todo o namespace da Internet e deve seguir esses padrões.

Se você quer apenas ter um link para seu próprio aplicativo, recomendo que você siga a abordagem que descrevi aqui:

Como registrar algum namespace de URL (myapp: //app.start/) para acessar seu programa chamando uma URL no navegador no sistema operacional Android?


Outra abordagem alternativa para o Diego é usar uma biblioteca:

https://github.com/airbnb/DeepLinkDispatch

Você pode declarar facilmente os URIs que deseja gerenciar e os parâmetros que gostaria de extrair por meio de anotações na Atividade, como:

@DeepLink("path/to/what/i/want")
public class SomeActivity extends Activity {
  ...
}

Como um acréscimo, os parâmetros de consulta também serão transmitidos para a Activity.





intentfilter