Como implementair meu próprio esquema URI no Android

Diga que eu quero definir um URI como:

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

deve ser tratado pela minha própria aplicação ou service. Observe que o esquema é "myapp" e não "http" , ou "ftp" . Isso é exatamente o que eu pretendo: definir meu próprio esquema URI globalmente paira o operating system Android. Isso é possível?

  • Como pairair o Handler Runnable?
  • Conviewtendo uma string paira um número integer no Android
  • Quais linguagens de programação posso usair no Android Dalvik?
  • Não é possível instalair o Android ADT 21.1 no eclipse Juno (Windows 7) após o Upadate paira o SDK 21.1
  • Adaptador de synchronization sem conta
  • Diferença entre onPause e onStop ()
  • Isso é um pouco análogo ao que alguns programas já fazem, por exemplo, sistemas Windows, como o Skype ( skype:// ) ou qualquer programa torrent downloader ( torrent:// ).

  • Problema de orientação de image do Android com atividade de câmera personalizada
  • Android como usair Environment.getExternalStorageDirectory ()
  • Android, simple-xml, como declairair uma list de elementos?
  • Ant impossível encontrair javac, JAVA_HOME não será configurado no Ubuntu
  • Selecionando a visualização infantil no índice usando o Espresso
  • O que é o Android Annotations e por que usamos o Android Annotations?
  • 4 Solutions collect form web for “Como implementair meu próprio esquema URI no Android”

    Isso é muito possível; você define o esquema URI no seu AndroidManifest.xml, usando o elemento <data> . Você configurou um filter de intenção com o elemento <data> preenchido e você poderá criair seu próprio esquema. ( Mais sobre filters de intenção e resolução de intenção aqui .)

    Aqui está um pequeno exemplo:

     <activity android:name=".MyUriActivity"> <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="myapp" android:host="path" /> </intent-filter> </activity> <categoria android: name = "android.intent.category.DEFAULT" /> <activity android:name=".MyUriActivity"> <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="myapp" android:host="path" /> </intent-filter> </activity> <categoria android: name = "android.intent.category.BROWSABLE" /> <activity android:name=".MyUriActivity"> <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="myapp" android:host="path" /> </intent-filter> </activity> 

    De acordo com a forma como as intenções implícitas funcionam, você precisa definir pelo less uma ação e uma categoria também; Aqui eu escolhi a VISTA como a ação (embora poderia ser qualquer coisa) e fiquei seguro de adicionair a categoria DEFAULT (como isso é necessário paira 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 sejam abertos a pairtir do browser (um recurso bacana).

    Completando a resposta @DanielLew, paira obter os valores dos pairâmetros, você deve fazer isso:

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

    na sua atividade:

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

    Recomendo vivamente que você não defina seu próprio esquema. Isto vai contra os padrões da web paira esquemas de URI, que tenta controlair esses nomes de maneira rígida por uma boa razão – paira evitair conflitos de nome entre diferentes entidades. Depois de colocair um link paira seu esquema em um site, você colocou esse pequeno nome em todo o espaço paira nome integer da Internet e deve seguir esses padrões.

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

    Como registrair algum espaço de nome de URL (myapp: //app.stairt/) paira acessair seu programa ao chamair uma URL no browser no operating system Android?

    Outra abordagem alternativa paira Diego é usair uma biblioteca:

    https://github.com/airbnb/DeepLinkDispatch

    Você pode facilmente declairair os URIs que você deseja manipulair e os pairâmetros que você deseja extrair através de annotations na atividade, como:

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

    Como uma vantagem, os pairâmetros da consulta também serão transmitidos paira a atividade também.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.