42 votes

android personnalisé schéma d'url..?

Im essayant de créer mon propre schéma d'url donc mon application android peut être appelé via une URL, mais pour l'instant je n'ai pas de succès.

Im essayant d'avoir cette url fonctionne : cedemo://com.cedemo.scan?X=toto

Voici une partie de mon fichier manifeste :

<activity android:name=".Gallery1" android:label="@string/app_name" android:launchMode="singleTask" android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.GALLERY" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="cedemo" android:host="com.cedemo.scan" />

        </intent-filter>
</activity>

Personne ne peut aider en me disant quel est le problème ? Aussi, si quelqu'un à trouver ce qui est mal, quelqu'un peut-il me dire comment je l'ai lu le "X" de la variable à l'intérieur de l'android code de mon application ?


Mise à jour:

Mise à jour: j'ai fait la modification de l'action (comme conseillé dans l'une des réponses) et ça a bien fonctionné. Le truc c'est que je ne peux toujours pas obtenir l'url de la valeur de la variable. Voici le code que j'ai essayé.

final Intent intent = getIntent();
final String myScheme=intent.getScheme();
final Bundle myBundle=intent.getExtras();
final boolean inContestKey;
if (myBundle != null) {
    inContestKey=myBundle.containsKey("inContest");
}
final Uri myURI=intent.getData();
final String value;
if (myURI != null) {
    value = myURI.getQueryParameter("inContest");
}

Mais ce que je reçois null de toutes les fonctions... que puis-je faire?

Peut-être que je devrais mieux expliquer le contexte de mon logiciel:

  1. Mon logiciel est démarré
  2. Mon logiciel de lancement puis le navigateur
  3. l'utilisateur clique sur un lien dans le navigateur et le navigateur, accédez à l'url régime, retour vers le logiciel avec une variable "X" (par exemple)
  4. le logiciel doit lire la variable "X"

Mais dans mon cas : myScheme, myBundle, myURI sont définies à l' null.

Des idées ?


Mise à jour:

J'ai trouvé la réponse, c'est que vous avez à être à l'activité principale de le faire.

44voto

Greg Giacovelli Points 6045

Je pense que le problème est avec l'Action que vous avez défini. Il y a un "android.l'intention.d'action.VUE" qui est, je pense, ce que vous voulez.

<activity android:name=".Gallery1" android:label="@string/app_name" android:launchMode="singleTask" android:screenOrientation="portrait">
        <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="cedemo" android:host="com.cedemo.scan" />

        </intent-filter>
</activity>

Essayer et je parie que sauront résoudre correctement. Je n'en ai fait cette hypothèse parce que vous avez inclus le navigables de la catégorie, qui est généralement utilisé par le Navigateur, qui ne sais pas du tout de vos actions personnalisées. Si vous ne voulez que la GALERIE d'action que vous avez implicite puis il suffit de créer 2 filtres

<activity android:name=".Gallery1" android:label="@string/app_name" android:launchMode="singleTask" android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.GALLERY" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="cedemo" android:host="com.cedemo.scan" />

        </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="cedemo" android:host="com.cedemo.scan" />

        </intent-filter>
</activity>

Donc dans le contenu de votre activité, vous pouvez faire quelque chose comme:

// Value should be "toto" as in your example
String value = getData().getQueryParameter("X"); 

8voto

leontx Points 530

Ce qui, enfin, fixe les choses pour moi a été de changer l' ordre des éléments XML. Plus précisément, l'échange de données et de lignes d'action donc les données avant que l'action ne fait de commencer à travailler.

     <intent-filter>
        <data android:scheme="myappname" />
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.BROWSABLE" />
        <category android:name="android.intent.category.DEFAULT" />
     </intent-filter>

Et pour être complet, mon lien dans le html est "myappname://noop".

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