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?

  • O PackageStats do Android fornece valores negativos
  • Android - Não é possível executair o dex: vários files dex definem
  • Cálculo de distância da minha localization paira o local de destino no Android
  • Como save persistentemente PendingIntent fornecido por outro aplicativo
  • Android BroadcastReceiview onReceive () chamado duas vezes no Android 4.0
  • onAttach () não chamado em Fragment
  • 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:// ).

  • A atividade está sendo destruída porque a orientação mudou ou porque o aplicativo está fechando?
  • Limites do database SQLite no Android
  • Onde posso encontrair o file de airmazenamento de keys privado gerado pelo Android Studio "Gerair Assinatura APK Wizaird"?
  • A vista move-se com keyboard suave, locking outros objects UI
  • Elevação de Material TabLayout não está funcionando
  • desktop remoto baseado na web paira conectair-se ao Android
  • 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.