Question

Dire que je veux définir qu'un URI comme:

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

doit être traitée par ma propre application ou d'un service. Notez que le régime est "myapp" et non "http" ou "ftp". C'est précisément ce que je veux: définir mon propre schéma URI globalement pour le système d'exploitation Android. Est-ce possible?

est un peu analogue à ce que certains programmes déjà faire sur, par exemple, les systèmes Windows, tels que Skype (skype://) ou tout autre programme téléchargeur torrent (torrent://).

Était-ce utile?

La solution

Ceci est très possible; vous définissez le schéma d'URI dans votre AndroidManifest.xml, en utilisant le <data> . Vous configurez un filtre avec l'intention de l'élément <data> rempli, et vous serez en mesure de créer votre propre système. ( Plus sur les filtres d'intention et la résolution l'intention .)

Voici un court exemple:

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

Selon la façon dont les intentions implicites de travail, vous devez définir au moins une action et une catégorie aussi bien; ici j'ai choisi VIEW comme l'action (bien qu'il pourrait être quelque chose), et fait en sorte d'ajouter la catégorie DEFAULT (comme cela est nécessaire pour toutes les intentions implicites). Notez également que j'ajouté la catégorie BROWSABLE -. ce n'est pas nécessaire, mais il permettra à votre URIs d'être ouvert à partir du navigateur (une fonctionnalité vraiment sympathique)

Autres conseils

@DanielLew réponse, pour obtenir les valeurs des parameteres que vous devez faire ceci:

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

dans votre activité:

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

Je recommande fortement que vous définissez pas votre propre système. Cela va à l'encontre des standards du web pour les schémas d'URI, qui tente de contrôler de manière rigide les noms pour une bonne raison - pour éviter les conflits de nom entre les différentes entités. Une fois que vous mettez un lien vers votre système sur un site Web, vous avez mis ce petit nom dans l'ensemble de l'espace de noms toute l'Internet, et devrait suivre ces normes.

Si vous voulez juste être en mesure d'avoir un lien vers votre propre application, je vous recommande de suivre l'approche que je décrit ici:

Comment enregistrer un nom d'espace d'URL? (myapp: //app.start/) pour accéder à votre programme en appelant une URL dans le navigateur sous Android OS

Une autre approche alternative à Diego de consiste à utiliser une bibliothèque:

https://github.com/airbnb/DeepLinkDispatch

Vous pouvez facilement déclarer les URIs que vous souhaitez gérer et les paramètres que vous aimeriez extraire par des annotations sur l'activité, comme:

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

En plus, les paramètres de la requête seront également transmises à l'activité ainsi.

La question est posée il y a quelques années, et Android est beaucoup évolué sur ce schéma d'URI.
De schéma d'URI d'origine, à un lien profond, et maintenant des liens Android App.

Android recommande maintenant d'utiliser les URL HTTP, et non pas de définir votre propre schéma d'URI. Parce que Android App Liens utilisent les URL HTTP qui pointent vers un domaine du site que vous possédez, donc aucune autre application peut utiliser vos liens. Vous pouvez vérifier la comparaison des liens profonds et des liens Android App de

Maintenant, vous pouvez facilement ajouter un schéma d'URI en utilisant l'option Android Studio: Outils> Gest Liens assistant. S'il vous plaît se référer les détails sur le document Android: https://developer.android. com / studio / écriture / app-link-indexing.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top