Domanda

Di 'voglio definire che un URI come ad esempio:

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

deve essere gestito dalla mia propria applicazione, o di un servizio. Si noti che il regime è "myapp" e non "http" o "ftp". Questo è esattamente ciò che intendo: per definire il mio schema URI a livello globale per il sistema operativo Android. È possibile?

Questo è in qualche modo analogo a quello che alcuni programmi già fare su, ad esempio, i sistemi Windows, come ad esempio Skype (skype://) o qualsiasi programma torrente downloader (torrent://).

È stato utile?

Soluzione

Questo è molto possibile; si definisce lo schema URI nel vostro AndroidManifest.xml, utilizzando il <data> elemento. Si imposta un filtro intenti con l'elemento <data> compilato, e sarete in grado di creare il proprio schema. ( Altro su filtri intento e risoluzione intenzione qui .)

Ecco un breve esempio:

<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>

Come per come intenti implicita di lavoro, è necessario definire almeno un'azione e una categoria come pure; qui ho scelto VISTA come azione (anche se potrebbe essere qualsiasi cosa), e fatto in modo di aggiungere la categoria DEFAULT (come questo è richiesto a tutti gli impliciti). Anche notare come ho aggiunto la categoria BROWSABLE -. Questo non è necessario, ma permetterà al vostro URI di essere apribile dal browser (una bella funzionalità)

Altri suggerimenti

A complemento del @DanielLew risposta, per ottenere i valori delle parameteres quello che dovete fare questo:

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

nella vostra attività:

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

Vi consiglio vivamente di non definire il proprio schema. Questo va contro gli standard web relative ai regimi di URI, che tenta di controllare rigidamente quei nomi per una buona ragione - per evitare conflitti di nomi tra entità diverse. Una volta messo un link al tuo schema su un sito web, hai messo quel nome in intero spazio dei nomi di tutto l'Internet, e dovrebbe essere a seguito di tali norme.

Se si desidera solo essere in grado di avere un link al tuo app, vi consiglio di seguire l'approccio che ho descritto qui:

Come registrare qualche spazio dei nomi URL? (myapp: //app.start/) per l'accesso al programma chiamando un URL nel browser Android OS

Un altro approccio alternativo a Diego è quello di utilizzare una libreria:

https://github.com/airbnb/DeepLinkDispatch

Si può facilmente dichiarare le URI che desideri gestire e parametri ti piacerebbe estrarre attraverso le annotazioni sulla attività, come:

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

Come un plus, saranno passati i parametri di query lungo l'attività pure.

Come viene posta la domanda di anni fa, e Android è evoluto molto su questo schema URI.
Da schema URI originale, al profondo legame, e ora Link App Android.

Android ora consiglia di utilizzare URL HTTP, senza definire il proprio schema URI. Perché Link App Android utilizzano URL HTTP che puntano a un dominio del sito web si possiede, in modo che nessun altra applicazione può utilizzare il vostro link. È possibile controllare il confronto delle deep link e collegamenti App Android da qui

Ora si può facilmente aggiungere uno schema URI utilizzando l'opzione Studio Android: Strumenti> App Link Assistant. Fare riferimento al dettaglio del documento Android: https://developer.android. com / studio / scrittura / app-link-indexing.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top