web-dev-qa-db-fra.com

Comment passer des paramètres à Android Intention dans un nouveau schéma sur Chrome?

J'ai une application Web qui appelle une application native sur Android via une intention iframe qui ne fonctionne pas dans chrome 25 selon ce qui suit ....

https://developers.google.com/chrome/mobile/docs/intents

L'intention était structurée comme suit ...

app: // Requesttype = Testing & Type = 123 & tn = 0000000000

Dans le nouveau schéma intention: //, comment pourrais-je transmettre les paramètres répertoriés après app: // à l'application native? Je n'ai pas pu trouver d'exemple.

25
user2418024

Avec le nouveau schéma, vous pouvez transmettre des arguments en tant que suppléments à l'application, mais vous devez coder l'URI comme suit:

<a href="intent://whatever/#Intent;scheme=myapp;package=com.what.ever.myapp;S.myextra=mystring;end">Do Whatever</a>

Cela passera une chaîne supplémentaire appelée "myextra" avec la valeur "mystring". En jetant un œil au Code Android nous pouvons voir comment les paramètres supplémentaires doivent être codés. Le " [~ # ~] s [~ # ~] " au début du paramètre "myextra" le définit comme une chaîne. D'autres types peuvent être:

String => 'S'
Boolean =>'B'
Byte => 'b'
Character => 'c'
Double => 'd'
Float => 'f'
Integer => 'i'
Long => 'l'
Short => 's'

Par exemple, si nous voulons passer deux paramètres supplémentaires, un entier et une chaîne, nous pouvons le faire:

<a href="intent://whatever/#Intent;scheme=myapp;package=com.what.ever.myapp;S.name=Perico%20de%20los%20Palotes;i.age=35;end">Do Whatever</a>

Notez que vous devrez encoder par URL tous les paramètres.

Dans votre application Android Android, vous devrez accepter ces extras. Dans l'événement "onCreate" de votre activité:

Bundle parametros = getIntent().getExtras();
if (extras != null){
    String name = extras.getString("name");
    Integer age = extras.getInt("age");

    if (name!=null && age!=null)
    {
       //do whatever you have to
       //...
    }
}else{
     //no extras, get over it!!
}

Et, bien sûr, ajoutez le filtre Android.intent.category.BROWSABLE dans votre manifeste, comme indiqué dans ce lien .

57
ojovirtual

Pour l'URL du schéma:

appname://RequestType/?Type=123&tn=0000000000

Vous souhaitez mapper vers une URL d'intention de:

intent://RequestType/?Type=123&tn=0000000000#Intent;scheme=appname;package=com.example.appname;end
6
AlexD

Vous ne pouvez plus utiliser un iframe et un protocole personnalisé pour ouvrir une application native.

Vous pouvez cependant utiliser la syntaxe intention: // existante pour lancer et intentionner et lui transmettre des données, cela a l'avantage supplémentaire de prendre l'utilisateur sur le Play Stockez-le s'il n'est pas installé.

Soit vous encodez les données dans la partie "chemin" de la syntaxe comme indiqué afin d'avoir intent://play/?a=1#Intent;......;end; ou vous pouvez l'encoder comme Extra.

3
Kinlan

Les intentions ne fonctionnent pas après 4.4.4, c'est donc ce que je fais pour mon application.

créé un schéma personnalisé pour lancer mon activité dans AndroidManifest.xml avec le filtre d'intention suivant

1)

 <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 UNIQUE SCHEME(I SUGGEST YOUR PACKAGE NAME)"/>
</intent-filter>

2) Construisez une URL de marché avec une URL de secours qui ouvre votre application via un schéma personnalisé créé ci-dessus.

market://details?id=<<your app package from AndroidManifest.xml>>&url=<<your app custom scheme from AndroidManifest.xml>>://yourdomain.com?encoded(p1=v1&p2=v2....etc)

cela ouvre le magasin si votre application n'est pas installée et ouvre l'application avec les données d'intention si l'application est déjà installée, avec vos paramètres décodés.

J'espère que cela t'aides

3
Sid