• Développer votre application de réalité augmentée avec l’API de Wikitude

    Publié le 02 novembre 2009 par Guy (GuyTouch)


    Dans  ce tuto je vais utiliser l’api de Wikitude pour développer ma propre application de réalité augmentée. Cette application de réalité augmentée affichera des lieux à visiter avec des définitions prises sur wikipedia.

    D’abord, télécharger l’api de test wikitude ici et dézipper le. Créer votre projet dans eclipse et importer votre librairie. Pour cela dans propriété du projet sélectionner->Jaba build Path-> onglet Librairie ->Add external Jars.

    ProjetAR1 Développer votre application de réalité augmentée avec lAPI de Wikitude Android France

    Dans mon interface xml je crée un bouton de lancement de mon application de réalité augmentée.

    ?Download download.txt
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    <TextView  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="@string/hello"
        />
        <Button android:text="lancement" 
    		android:id="@+id/Button1" 
    		android:layout_width="wrap_content" 
    		android:layout_height="wrap_content" />
     
      </LinearLayout>

    Dans la méthode oncreate de mon application, je lance mon inten de réalité augmentée avec ma méthode startARViewBasic()

    ?Download download.txt
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
     
            Button b = (Button) findViewById(R.id.Button1);
             b.setOnClickListener(new View.OnClickListener() {
    	        public void onClick(View v) {
    	         //  je lance mon inten de réalité augmenté
                       startARViewBasic();
    	        }
            });
        }

    Pour ouvrir mon client de réalité augmentée je procède en 3 méthodes

    ?Download download.txt
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
      /**
        * j'ouvre ma vue réalité augmenté
        **/
       private void startARViewBasic() {
     
    	   // Creation d'un intent basic  AR
    	   WikitudeARIntent intent = prepareIntent();
     
    	   // Titre de mon applicaiton
    	   intent.addTitleText("Ma AR application");
     
    	   // lancement de mon activity
    	   try {
    		   lecontext.startActivity(intent);
    	   }
         // erreur si l'application wikitude n'est pas installer sur votre téléphone
         catch (ActivityNotFoundException e) {
    		   Toast.makeText(this, "Rien trouvé "+e.getMessage(),
    		   Toast.LENGTH_SHORT).show();
    		   email.setText(e.getMessage()+"/"+intent.toString());
    		   //intent.toString()
    	   }
       }

    la méthode prepareIntent() qui collectionne les POI( point à afficher dans mon application AR)

    ?Download download.txt
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
     /**
         * prepares a Wikitude AR Intent (e.g. adds the POIs to the view)
         * 
         * @return the prepared intent
         */
        private WikitudeARIntent prepareIntent() {
    	    // create the intent
    	    WikitudeARIntent intent = new WikitudeARIntent(this.getApplication(),
    	    null, null);
    	    //add the POIs
    	    this.addPois(intent);
    	    return intent;
        }

    Et la dernière méthode addPois la plus intéressante, est celle dans laquelle je vais renseigner nos différentes positions cartographiques que je récupère sur Google Maps.

    ?Download download.txt
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    
     /**
         * adds hard-coded POIs to the intent
         * 
         * @param intent
         *            the intent
         */
        private void addPois(WikitudeARIntent intent) {
    	// mon point 1 le castillet de perpignan    
          WikitudePOI poi1 = new WikitudePOI(42.700664, 2.894377, 1, "Castillet Perpignan",
    	    "Le Castillet ou Castellet (en catalan) est un monument de la ville de Perpignan qui fut tour à tour porte de la ville et prison d'Etat. Aujourd'hui il abrite le Musée Catalan des Arts et Traditions Populaires (La Casa Pairal).");
    	// mon point 2 le palais de rois de marjorque  à perpignan   
          WikitudePOI poi2 = new WikitudePOI(
    	    42.697532,
    	    2.893424,
    	    1,
    	    "Palais des Rois de Majorque",
    	    "e palais des Rois de Majorque est un palais-forteresse de style gothique situé à Perpignan. Cet édifice fut achevé en 1309");
       // mon point 3 la cas musicale a perpignan	   
         WikitudePOI poi3 = new WikitudePOI(
    	    42.699128,
    	    2.90019,
    	    1,
    	    "Casa Musicale",
    	    "La Casa musicale, est un espace entièrement dédié à la pratique de la musique et de la danse sous toutes ses formes.");
       // mon point 5 le musée de tautavel dans les PO
    	    WikitudePOI poi4 = new WikitudePOI(
    	    42.843046,
    	    2.750473,
    	    1,
    	    "Musée de Tautavel",
    	    "Inauguré en 1992, le nouveau Musée de Tautavel, Centre Européen de Préhistoire, est un formidable outil au service de la vulgarisation des sciences rattachées à l'archéologie et particulièrement à la préhistoire sur les périodes du quaternaire méditerranéen");
       //ma collection  de point	   
        Collection<WikitudePOI> pois = new ArrayList<WikitudePOI>();
    	    pois.add(poi1);
    	    pois.add(poi2);
    	    pois.add(poi3);
    	    pois.add(poi4);
    	    intent.addPOIs(pois);
        }

    N’oubliez pas d’installer d’abord l’application wikitude sur votre téléphone.

    device1 300x200 Développer votre application de réalité augmentée avec lAPI de Wikitude Android France
    device2 300x200 Développer votre application de réalité augmentée avec lAPI de Wikitude Android France
    Le Code complet

    ?Download download.txt
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    
    package org.com.projetar;
     
    import java.util.ArrayList;
    import java.util.Collection;
     
    import android.app.Activity;
    import android.content.ActivityNotFoundException;
    import android.content.Context;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    import org.openintents.intents.WikitudeARIntent;
    import org.openintents.intents.WikitudePOI;
     
    public class ProjetAR extends Activity {
     
    	private TextView email;
    	Context lecontext = this;
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
     
            Button b = (Button) findViewById(R.id.Button1);
            email = (TextView) findViewById(R.id.mail);
             b.setOnClickListener(new View.OnClickListener() {
    	        public void onClick(View v) {
    	        	startARViewBasic();
    	        }
            });
        }   	
        /**
        * starts the basic AR view
        **/
       private void startARViewBasic() {
     
    	   // Create the basic intent
    	   WikitudeARIntent intent = prepareIntent();
     
    	   // Optionally add a title
    	   intent.addTitleText("My first AR application");
     
    	   // And launch the intent
    	   try {
    		   lecontext.startActivity(intent);
    	   } catch (ActivityNotFoundException e) {
    		   Toast.makeText(this, "Rien trouvé "+e.getMessage(),
    		   Toast.LENGTH_SHORT).show();
    		   email.setText(e.getMessage()+"/"+intent.toString());
    		   //intent.toString()
    	   }
       }
     
        /**
         * prepares a Wikitude AR Intent (e.g. adds the POIs to the view)
         * 
         * @return the prepared intent
         */
        private WikitudeARIntent prepareIntent() {
    	    // create the intent
    	    WikitudeARIntent intent = new WikitudeARIntent(this.getApplication(),
    	    null, null);
    	    //add the POIs
    	    this.addPois(intent);
    	    return intent;
        }
     
     
     
        /**
         * adds hard-coded POIs to the intent
         * 
         * @param intent
         *            the intent
         */
        private void addPois(WikitudeARIntent intent) {
    	    WikitudePOI poi1 = new WikitudePOI(42.700664, 2.894377, 1, "Castillet Perpignan",
    	    "Le Castillet ou Castellet (en catalan) est un monument de la ville de Perpignan qui fut tour à tour porte de la ville et prison d'Etat. Aujourd'hui il abrite le Musée Catalan des Arts et Traditions Populaires (La Casa Pairal).");
    	    WikitudePOI poi2 = new WikitudePOI(
    	    42.697532,
    	    2.893424,
    	    1,
    	    "Palais des Rois de Majorque",
    	    "e palais des Rois de Majorque est un palais-forteresse de style gothique situé à Perpignan. Cet édifice fut achevé en 1309");
    	    WikitudePOI poi3 = new WikitudePOI(
    	    42.699128,
    	    2.90019,
    	    1,
    	    "Casa Musicale",
    	    "La Casa musicale, est un espace entièrement dédié à la pratique de la musique et de la danse sous toutes ses formes.");
    	    WikitudePOI poi4 = new WikitudePOI(
    	    42.843046,
    	    2.750473,
    	    1,
    	    "Musée de Tautavel",
    	    "Inauguré en 1992, le nouveau Musée de Tautavel, Centre Européen de Préhistoire, est un formidable outil au service de la vulgarisation des sciences rattachées à l'archéologie et particulièrement à la préhistoire sur les périodes du quaternaire méditerranéen");
    	    Collection<WikitudePOI> pois = new ArrayList<WikitudePOI>();
    	    pois.add(poi1);
    	    pois.add(poi2);
    	    pois.add(poi3);
    	    pois.add(poi4);
    	    intent.addPOIs(pois);
        }
     
    }

    .
    Il est temps de mettre à profit les tutoriels d’Android France:
    Passez à la vitesse supérieure et investissez quelques dizaines d’euros pour acquérir les connaissances qui vous feront gagner de l’argent avec vos applications rendez-vous sur notre boutique Android-france pour ces formations en vidéo


    Guy

    Co-fondateur du site Android france, senior lead developper, passionné de bière et de cigare cubain

    Twitter Google+ 

  • 26 Commentaires pour ce billet

    1. 1 - Vincent Madelain dit:

      Bonjour,

      Dans votre exemple, est ce que les hard-coded POIs se retrouvent au final dans la base communautaire ou est ce que qu’il ne servent qu’à l’affichage en local sur le telephone?

      Merci

    2. 2 - Guy dit:

      @Vincent Madelain je pense qu’il reste en local sur le téléphone

    3. 3 - Samuel Pineau dit:

      Bonjour,

      en regardant votre code, je me suis aperçu que vous avez oublier de mentionner une partie du code :

      dans la déclaration des variables globales il y a “private TextView email;”
      vous l’implémentez dans la méthode “void onCreate (…)” par la ligne
      ” email = (TextView) findViewById(R.id.mail);”.

      Comment définit on la méthode “mail” dans le code xml.
      C’est vrai que je peux tout aussi bien me passer de cette méthode, car je vois pas la suite qu’elle ne sert que lorsque Wikitude n’est pas installé, mais c’est aussi par curiosité que je vous pose cette question.

      Merci d’avance
      Samuel

    4. 4 - Guy dit:

      @samuel pineau pour le moment dans se code elle ne sert à rien

    5. 5 - Romain dit:

      Bonjour,

      Une fois mon application développée en suivant ce tutoriel, j’ai, en cliquant sur le bouton “lancement” crée, le message d’erreur suivant : “Désolé ! Fermeture soudaine de l’application projetar (du processus org.com.projetar). Merci de réessayer.”
      J’ai pourtant suivi ce tutoriel avec attention et il ne me semble pas avoir commis d’erreur, pourrais-je avoir de l’aide à ce sujet ?

      Merci d’avance.

    6. 6 - Guy dit:

      @Romain est ce que tu as installé sur ton téléphone l’application wikitude

    7. 7 - Romain dit:

      Alors non, car j’ai aussi eu une erreur en essayant d’installer Wikitude (la suivante : “Failure [INSTALL_FAILED_MISSING_SHARED_LIBRARY]“).

      Parallèlement à cette erreur, je voulais avancer sur ce tutoriel tout en sachant que je serais forcément bloqué tôt ou tard mais je pensais que j’aurais eu l’erreur de ce code :
      catch (ActivityNotFoundException e) {
      Toast.makeText(this, “Rien trouvé “+e.getMessage(),
      Toast.LENGTH_SHORT).show();
      email.setText(e.getMessage()+”/”+intent.toString());
      //intent.toString()
      }

      Quoi qu’il en soit je suis bloqué et je ne sais vers quelle direction chercher.

      Merci de ton aide.

    8. 8 - Romain dit:

      Voilà, j’ai pu corriger mon erreur précédente. Cette fois l’erreur est la suivante lors du lancement de l’application :

      “Rien trouvé No Activity found to handle Intent { act=org.openIntents.action.AR_VIEW (has extras) }

      Cela est bien plus proche de l’erreur que j’attendais dû à l’absence de Wikitude. Je vais, cette fois, chercher à corriger mon erreur lors de cette installation.

      Merci.

    9. 9 - Benjamin dit:

      J’ai tester ça marche. Par contre je sais pas si c’est l’application, mais c’est archi archi lent sur mon HTC Magic. S’en ai même pas utilisable contrairement à Layar.
      Dommage, j’attendrai une nouvelle version avant de m’y mettre.

    10. 10 - Romain dit:

      Bonjour,

      J’ai pu développer ma propre application de réalité augmentée avec l’API Wikitude et grâce à ce tutoriel.
      Cependant, je me demandais s’il était possible de supprimer l’inscription “Beta” à l’écran et jusqu’à quel point cette API était exploitable ? J’entends par cette question quelles sont les fonctionnalités offertes par cette API en dehors de cette possibilité de hard-codage des POI ? Est-il possible d’effectuer des appels vers une base de données privée, par exemple ?

    11. 11 - Guy dit:

      @Romain pour enlever l’inscription beta il faudrait contacter wikitude quite fournira une api et toutes les fonctionnalités supplementaires pour une utilisation en production.

    12. 12 - Ludovic B. dit:

      Bonjour,

      J’aimerais savoir comment vous avez fait pour installer Wikitude sur l’émulateur ?

      Car j’ai la même erreur que Romain, c’est à dire : « Rien trouvé No Activity found to handle Intent { act=org.openIntents.action.AR_VIEW (has extras) }

      Merci !

    13. 13 - Romain dit:

      Salut,

      Au risque de te décevoir, personnellement, je n’ai toujours pas résolu ce problème avec l’émulateur. J’ai fini par créer mon application de réalité augmentée basée sur l’API Wikitude, sur un HTC Dream (G1) (sous Android 1.5) et le résultat est tout à fait satisfaisant.
      De plus, créer une application de ce type sur l’émulateur n’est pas vraiment probant étant donné que tu n’as pas, de base sur l’émulateur, la gestion de la caméra et du positionnement GPS.
      En espérant que tu réussisses tout de même à résoudre ton problème et répondre à tes besoins.

    14. 14 - Ludovic B. dit:

      Le positonnement GPS se fait avec telnet et geo fix :)

      Moi j’installe des Wikitude sur l’émulateur mais soit il trouve pas la classe comme ci-dessus, soit il me dit de le mettre à jour… !

      Je vais tenter de poursuivre ou je vais me tourner vers Layar.

    15. 15 - Ludovic B. dit:

      Si quelqu’un peut m’éclairer sur un point avec Layar. Si j’ai bien compris pour développer avec Layar, il faut créer un webservice répondant avec nos POI et rajouter cette couche sur Layar ?

      Ensuite si la couche est approuvée, celle-ci est mise sur le réseau Layar et accessible depuis les clients finaux avec Layar.

      Mais comment les développeurs sont ils rémunérés ? Ne peut on pas faire son propre Layar pour faire son produit avec sa couche de AR ?

    16. 16 - Ludovic B. dit:

      @Romain

      As tu trouvé un moyen pour forcer l’utilisateur à installer Wikimedia dans ton application ?

    17. 17 - Guillaume L. dit:

      Bonjour,
      Développant une API sur Wikitude 4, je prépare une liste de POIs que je personnalise avant le lancement de Wikitude. Tous sont bien pris en compte. Mon problème se situe au niveau de l’actualisation de ces POIs. Les méthodes intent.addPOI() ou intent.removePOI() ne semble avoir aucun effet une fois Wikitude lancé. Ma question : Existe-t-il une méthode pour rafraichir les POIs ?
      Merci.

    18. 18 - fred dit:

      bonjour a à tous.
      je pense qu’avec les spécialistes qu’il y a dans ce post , vous pourrez m’aider si vous si le voulez.
      voila je vois que par mal de personne s’interressé à la création PUR ET DUR d’un appli basé sur une api et donc soumis ensuite à l’approbation d’APPLE,si j’ai bien compris.
      pour ma part j’ai juste besoin de créer un calque(je pense utilisé WIKITUDE qui est aussi compatible avec le 3 G contrairement à LAYAR)j’ai quasiment réussi en créant un fichier KML sur google earth qui regroupe les POI mais je ne vois pas comment ajouter a ces points les info pour le lien “WWW” et “I” ou créer un lien vers une Video.c’est si simple ave wikitude .ME..
      merci beaucoup d’avance car c’zst trés urgent et vous aiderez un jeune entrepreneur ;-)

    19. 19 - sluce dit:

      Bonjour,

      J’ai cette erreur lorsque je veux installer une appli sur l’emulateur :
      Failure [INSTALL_FAILED_MISSING_SHARED_LIBRARY]

      Quelqu’un peut m’aider ?

      Merci d’avance,

      Stéphane

    20. 20 - Guy dit:

      @sluce as tu installé l’application wikitude

    21. 21 - sluce dit:

      Non c’est une autre application que quelqu’un m’a passé et qui tourne pour lui.

      Je me suis permis de poster ici car c’est le seul article qui ressort sur Google avec cette erreur. Désolé si je suis un peu hors sujet mais ça fais 2 jours que je suis bloqué

    22. 22 - zizou dit:

      bonjour
      voila je veux installer wikitude sur mon tel mais quand je télécharge l api sur wikitude.org et je dizipe il ya erreur

      je bloque comment faire ??merciiiiiiiiiiiiii

    23. 23 - AlexKid dit:

      Bonjour,

      Après avoir suivi ce tuto à la règle et après son implémentation sur mon téléphone je reçois le message:

      l’application n’est pas installé sur votre téléphone (ce qui est faux).

      Je pense que cela est dû à une erreur de “permission”. voici la ligne en lien direct avec mon erreur selon moi…

      ActivityManager: java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0×10000000 cmp=appli.wikitude.test/.wiki } from null (pid=12826, uid=2000) requires null

      Quelqu’un pourrait – il m’aider au plus vite SVP ???

    24. 24 - Guy dit:

      @AlexKid tu a mis les bonnes autorisation fichier manifest dans ton application accès internet,accès à la caméra etc ..

    25. 25 - AlexKid dit:

      Bonjour,

      J’ai réussi à fixer le problème. Merci Guy pour le conseil.
      J’ai maintenant une autre question.

      Apres avoir demandé sur le site de wikitude une clé pour enlevé le BETA WIKITUDE, l’appli m’indique que ma clé est mauvaise alors que non ! Doit on attendre un certain délai avant de pouvoir voir son univers ?

    26. 26 - mcbjam dit:

      Est ce qu’il y’a un moyen quelconque de testé l’exemple sans android. Avec le tollkit par exemple ?

  • Laissez un commentaire

  • Les Brèves