245 votes

Faire un lien dans le navigateur Android démarrer mon application?

Est-il possible de faire un lien tel que:

<a href="anton://useful_info_for_anton_app">click me!</a>

la cause de mon Anton application à démarrer?

Je sais que cela fonctionne pour l'application Android Market avec le protocole du marché, mais peut être fait quelque chose de similaire avec d'autres applications?

Voici un exemple de lien qui vous permettra de démarrer l'Android Market:

<a href="market://search?q=pname:com.nytimes.android">click me!</a>

Mise à jour: La réponse que j'ai accepté fournis par eldarerathis fonctionne très bien, mais je veux juste dire que j'ai eu quelques difficultés avec l'ordre des sous-éléments de l' <intent-filter> balise. Je vous suggère de simplement faire un autre <intent-filter> avec le nouveau sous-éléments dans cette balise pour éviter les problèmes que j'ai eu. Par exemple mon AndroidManifest.xml ressemble à ceci:

<activity android:name=".AntonWorld"
          android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter>
        <data android:scheme="anton" />
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.BROWSABLE" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

286voto

hackbod Points 55292

Veuillez NE PAS utiliser votre propre modèle personnalisé comme ça!!! Modèles d'URI sont un réseau mondial d'espace de noms. Possédez-vous le "anton:" schéma à l'échelle mondiale? Non? Alors NE l'utilisez PAS.

Une option est d'avoir un site web, et avoir un intent-filter pour un URI sur ce site web. Par exemple, c'est quel Marché pour intercepter les Uri sur son site web:

        <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="http" android:host="market.android.com"
                android:path="/search" />
        </intent-filter>

Sinon, il y a le "intention:" schéma. Cela vous permet de décrire presque tout de l'Intention d'un URI, le navigateur va essayer de lancer lorsque l'utilisateur clique dessus. Pour construire un tel système, la meilleure façon est de simplement écrire le code pour construire l'Intention, vous voulez lancé, puis imprimer le résultat de l'intention.tour(Intention.URI_INTENT_SCHEME).

Vous pouvez utiliser une action avec cette intention pour trouver toute l'activité de soutien de cette action. Le navigateur va automatiquement ajouter le NAVIGABLES de catégorie à l'intention avant de le lancer, pour des raisons de sécurité; elle permettra aussi de supprimer tout élément explicite que vous avez fourni pour la même raison.

La meilleure façon de l'utiliser, si vous voulez vous assurer qu'il lance seulement dans votre application, est avec votre propre étendue de l'action et de l'Intention.setPackage() pour dire que l'Intention ne correspondent à votre package d'application.

Compromis entre les deux:

  • Uri http exiger de vous que vous avez un nom de domaine vous est propre. L'utilisateur aura toujours obtenir la possibilité de montrer l'URI dans le navigateur. Il est très agréable de repli propriétés où, si votre application n'est pas installée, ils vont tout simplement se poser sur votre site web.

  • l'intention Uri exiger que votre application déjà être installé et uniquement sur les téléphones Android. La permettre à presque n'importe quelle intention, mais ont toujours la NAVIGABLE par catégorie, et pas l'appui explicite des composants). Ils vous permettent de diriger le lancement uniquement à votre application sans que l'utilisateur ait la possibilité, au lieu d'aller vers le navigateur ou toute autre application.

101voto

eldarerathis Points 14545

Je pense que vous aurez envie de regarder à l' <intent-filter> élément de votre Mainfest fichier. Plus précisément, jetez un oeil à la documentation de l' <data> sous-élément.

Fondamentalement, ce que vous devez faire est de définir votre propre schéma. Quelque chose le long des lignes de:

<intent-filter>
    <data android:scheme="anton" />
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" /> <--Not positive if this one is needed
    ...
</intent-filter>

Ensuite, vous devriez être en mesure de lancer votre application avec des liens qui commencent avec l' anton: schéma d'URI.

14voto

Lito Points 140

Je m’excuse pour la promotion de moi-même, mais j’ai un plugin jQuery pour lancer des applications natives du web liens https://github.com/eusonlito/jquery.applink

Vous pouvez l’utiliser facilement :

Cordialement, Lito.

13voto

ashwani Points 21

J’ai aussi fait face à ce problème et voir de nombreuses pages absurdes. J’ai appris que pour faire votre application peut être explorée, modifier l’ordre des éléments XML, ce ceci :

Cela a fonctionné pour moi et peut vous aider.

4voto

pdt Points 29

Une fois que vous avez l'intention et personnalisé schéma d'url pour votre application mis en place, ce code javascript dans le haut d'une page de réception qui a fonctionné pour moi à la fois sur iOS et Android:

<script type="text/javascript">
// if iPod / iPhone, display install app prompt
if (navigator.userAgent.match(/(iPhone|iPod|iPad);?/i) ||
    navigator.userAgent.match(/android/i)) {
  var store_loc = "itms://itunes.com/apps/raditaz";
  var href = "/iphone/";
  var is_android = false;
  if (navigator.userAgent.match(/android/i)) {
    store_loc = "https://play.google.com/store/apps/details?id=com.raditaz";
    href = "/android/";
    is_android = true;
  }
  if (location.hash) {
    var app_loc = "raditaz://" + location.hash.substring(2);
    if (is_android) {
      var w = null;
      try {
        w = window.open(app_loc, '_blank');
      } catch (e) {
        // no exception
      }
      if (w) { window.close(); }
      else { window.location = store_loc; }
    } else {
      var loadDateTime = new Date();
      window.setTimeout(function() {
        var timeOutDateTime = new Date();
        if (timeOutDateTime - loadDateTime < 5000) {
          window.location = store_loc;
        } else { window.close(); }
      },
      25);
      window.location = app_loc;
    }
  } else {
    location.href = href;
  }
}
</script>

Cela a été testé uniquement sur le navigateur Android. Je ne suis pas sûr à propos de Firefox ou Opera. La clé est de même si le navigateur Android ne sera pas jeter une belle exception pour vous sur window.open(custom_url, '_blank'), il échouera et retournera null qui vous pouvez tester plus tard.

Mise à jour: à l'aide d' store_loc = "https://play.google.com/store/apps/details?id=com.raditaz"; faire un lien Google Play sur Android.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X