Lancement de l'application android personnalisée à partir du navigateur android

est-ce que quelqu'un peut s'il vous plaît me guider sur la façon de lancer mon application android à partir du navigateur android?

380
demandé sur Rahul Tiwari 2010-06-02 18:34:54

15 réponses

utilisez un <intent-filter> avec un élément <data> . Par exemple, pour gérer tous les liens vers twitter.com vous mettriez ça dans votre <activity> dans votre AndroidManifest.xml :

<intent-filter>
    <data android:scheme="http" android:host="twitter.com"/>
    <action android:name="android.intent.action.VIEW" />
</intent-filter>

ensuite, lorsque l'utilisateur clique sur un lien vers twitter dans le navigateur, il lui sera demandé quelle application utiliser afin de compléter l'action: le navigateur ou votre application.

bien sûr, si vous souhaitez fournir une intégration étroite entre votre site web et votre application, vous pouvez définir votre propre jeu:

<intent-filter>
    <data android:scheme="my.special.scheme" />
    <action android:name="android.intent.action.VIEW" />
</intent-filter>

alors, dans votre application web vous pouvez mettre des liens comme:

<a href="my.special.scheme://other/parameters/here">

Et lorsque l'utilisateur clique dessus, votre application sera lancée automatiquement (car il sera probablement le seul qui peut gérer my.special.scheme:// type d'uri). Le seul inconvénient est que si l'utilisateur ne dispose pas de l'application installée, ils ont une fâcheuse erreur. Et je ne suis pas sûr qu'il y ait un moyen de vérifier.


modifier: pour répondre à votre question, vous pouvez utiliser getIntent().getData() qui renvoie un Uri objet. Vous pouvez ensuite utiliser Uri.* méthodes pour extraire les données dont vous avez besoin. Par exemple, disons que l'Utilisateur a cliqué sur un lien vers http://twitter.com/status/1234 :

Uri data = getIntent().getData();
String scheme = data.getScheme(); // "http"
String host = data.getHost(); // "twitter.com"
List<String> params = data.getPathSegments();
String first = params.get(0); // "status"
String second = params.get(1); // "1234"

vous pouvez faire ce qui précède n'importe où dans votre Activity , mais vous allez probablement vouloir le faire dans onCreate() . Vous pouvez également utiliser params.size() pour obtenir le nombre de segments de tracé dans la Uri . Consultez javadoc ou le site Web android developer pour d'autres méthodes Uri que vous pouvez utiliser pour extraire des pièces spécifiques.

588
répondu Felix 2010-06-02 19:56:09

S'il vous plaît voir mon commentaire ici: faire un lien dans le navigateur Android démarrer mon application?

nous décourageons fortement les gens d'utiliser leurs propres plans, à moins qu'ils ne définissent un nouveau plan internet mondial.

66
répondu hackbod 2017-05-23 12:34:44

toutes les réponses ci-dessus n'ont pas fonctionné pour moi avec CHROME en date du 28 janvier 2014

mon application lancée correctement à partir de http://example.com/someresource / liens à partir d'applications comme hangouts, gmail, etc mais pas à partir de chrome browser.

pour résoudre cela, pour qu'il se lance correctement à partir de CHROME, vous devez définir le filtre intention comme ceci

        <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:host="example.com"
                android:pathPrefix="/someresource/"
                android:scheme="http" />
            <data
                android:host="www.example.com"
                android:pathPrefix="/someresource/"
                android:scheme="http" />
        </intent-filter>

note l'élément pathPrefix 151940920"

votre application apparaîtra maintenant dans activity picker chaque fois que l'utilisateur demande http://example.com/someresource/ modèle de navigateur chrome en cliquant sur un lien des résultats de recherche google ou de tout autre site web""

64
répondu AndroidGecko 2014-01-28 16:59:09

dans mon cas, j'ai dû définir deux catégories pour le <intent-filter> et puis il a fonctionné:

<intent-filter>
<data android:scheme="my.special.scheme" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
47
répondu Zaki 2011-04-06 08:18:18

par exemple, vous avez des choses suivantes:

un lien pour ouvrir votre application: http://example.com

le nom du paquet de votre application: com.exemple.mypackage

ensuite, vous devez faire le suivant:

1) Ajouter un filtre d'intention à votre Activité (Peut être n'importe quelle activité que vous voulez. Pour plus d'informations, consultez la documentation ).

        <activity
        android:name=".MainActivity">

        <intent-filter android:label="@string/filter_title_view_app_from_web">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <!-- Accepts URIs that begin with "http://example.com" -->

            <data
                android:host="example.com"
                android:scheme="http" />
        </intent-filter>

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

    </activity> 

2) Créez un fichier HTML pour tester le lien ou utilisez cette méthode.

<a href="intent://example.com#Intent;scheme=http;package=com.example.mypackage;end">Open your Activity directly (just open your Activity, without a choosing dialog). </a>

<a href="http://example.com">Open this link with browser or your programm (by choosing dialog).</a>

3) Utilisez Mobile Chrome pour tester

4) C'est ça.

et il n'est pas nécessaire de publier app sur le marché pour tester deep linking=)

aussi, pour plus d'informations, cochez documentation et utile présentation .

18
répondu Денис Шовгеня 2015-11-20 09:32:13

il devrait également y avoir <category android:name="android.intent.category.BROWSABLE"/> ajouté au filtre d'intention pour faire reconnaître l'activité correctement à partir du lien.

16
répondu georgij 2010-07-16 11:55:04

le lien suivant donne des informations sur le lancement de l'application (si elle est installée) directement à partir du navigateur. Sinon, il ouvre directement l'application dans la boutique play de sorte que l'utilisateur peut télécharger sans difficulté.

https://developer.chrome.com/multidevice/android/intents

8
répondu Varun Bhatia 2015-05-27 03:37:47

Oui, Chrome recherche au lieu de chercher scheme. Si vous voulez lancer votre application via URI scheme, utilisez cette application utilitaire cool sur le Play store. Il a sauvé ma journée :) https://play.google.com/store/apps/details?id=com.naosim.urlschemesender

6
répondu RRK 2014-04-10 12:07:17

s'il vous plaît noter si votre icône disparaît du lanceur android lorsque vous mettez en œuvre cette fonctionnalité, que vous avez à Split intention-filtre.

    <activity
        android:name=".MainActivity"
        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>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="your-own-uri" />
        </intent-filter>
    </activity>
6
répondu Zoltan 2014-07-11 05:43:51

Felix approche à la gestion des liens profonds est typique de l'approche à la gestion des liens profonds. Je suggère également de vérifier cette bibliothèque pour gérer le routage et l'analyse de vos liens profonds:

https://github.com/airbnb/DeepLinkDispatch

vous pouvez utiliser des annotations pour enregistrer votre activité pour un URI lien profond particulier, et il va extraire les paramètres pour vous sans avoir à faire la rigmarole habituelle de obtenir les segments de chemin, l'assortir, etc. Vous pourriez simplement annoter et activité comme ceci:

@DeepLink("somePath/{someParameter1}/{someParameter2}")
public class MainActivity extends Activity {
   ...
}
3
répondu Christian 2015-07-02 18:46:42

J'ai la solution. Je n'ai pas de définir la catégorie comme "par Défaut". J'utilisais aussi l'activité principale pour les données d'intention. Maintenant j'utilise une activité différente pour les données d'intention. Merci pour l'aide. :)

0
répondu Parimal Modi 2010-06-03 12:17:02

vous devez ajouter un pseudo-nom d'hôte à la CALLBACK_URL 'app://' n'a pas de sens en tant qu'URL et ne peut pas être analysé.

0
répondu Paul Lindner 2010-06-07 21:09:57

exemple.php:

<?php
if(!isset($_GET['app_link'])){  ?>   
    <iframe src="example.php?app_link=YourApp://blabla" style="display:none;" scrolling="no" frameborder="0"></iframe>
    <iframe src="example.php?full_link=http://play.google.com/xyz" style="display:none;" scrolling="no" frameborder="0"></iframe>
    <?php 
}
else { ?>
    <script type="text/javascript">
    self.window.location        = '<?php echo $_GET['app_link'];?>';
    window.parent.location.href = '<?php echo $_GET['full_link'];?>';
    </script>
<?php 
}
0
répondu T.Todua 2018-03-01 14:48:16

Xamarin port de Felix 's answer

dans votre MainActivity , ajoutez ceci ( docs: Android.App.Classe IntentFilterAttribute ):

....
[IntentFilter(new[] { 
    Intent.ActionView }, 
    Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable }, 
    DataScheme = "my.special.scheme")
]
public class MainActivity : Activity
{
    ....

Xamarin ajoutera ce qui suit dans le AndroidManifest.xml pour vous:

<activity android:label="Something" android:screenOrientation="portrait" android:theme="@style/MyTheme" android:name="blahblahblah.MainActivity">
  <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="my.special.scheme" />
  </intent-filter>
</activity>

et dans le but d'obtenir des params ( j'ai testé en termes D'activité principale ):

var data = Intent.Data;
if (data != null)
{
    var scheme = data.Scheme;
    var host = data.Host;
    var args = data.PathSegments;

    if (args.Count > 0)
    {
        var first = args[0];
        var second = args[1];
        ...
    }
}

pour autant que je sache, ci-dessus peut être ajouté dans n'importe quelle activité ,non seulement activité principale

0
répondu Mehdi Dehghani 2018-03-15 12:48:15

Look @JRuns réponse dans ici . L'idée est de créer du html avec votre modèle personnalisé et de le télécharger quelque part. Ensuite, si vous cliquez sur votre lien personnalisé sur votre html-fichier, vous serez redirigé vers votre application. J'ai utilisé cet "article 151930920" pour android. Mais n'oubliez pas de définir le nom complet Name = "MyApp.Mobile.Droid.MainActivity" attribut à votre activité cible.

0
répondu S. Koshelnyk 2018-06-29 10:55:56