Apache Adobe Flex TutorialTutoriaux Adobe Flex & AIR en Français

11juil/1010

AIR pour Android – Autoriser une application Android à accéder à Internet

Dans le tutorial précédent, j'ai expliqué en détail comment créer une application Adobe Air pour Android:

Air Android – Créer une application Air pour Android (apk), le guide de A à Z

Malgré pas mal de pépins (expliqué par le fait je n'avais pas vraiment lu les documentations), mon application tournait enfin sur l'émulateur. Une application sans prétention bien sûr avec un champ texte et un bouton, rien de bien folichon.

Histoire de mettre un peu de piment, je me suis dit que j'allais essayer avec mes librairies que j'utilise pour mes projets pro (cartographie). Je prend donc mon application exemple qui affiche simplement un serveur cartographique WMS (serveur en ligne).

Je ne vous présente pas le code car il utilise uniquement des librairies que j'ai développé pour Business Geografic. Sachez qu'il utilise juste une librairie AS3, et quelques composants Flex instanciés en MXML. Rien de bien méchant ;) .

Voici le rendu en version Desktop:

map-android

Je prend donc cette application et la compile en .apk, exactement comme dans le guide Air pour Android. Désinstallation de l'application existante sur l'émulateur, installation de cette application. Pas de problème.

Et là, au lancement de l'application, surprise:

map-android-2

L'application est bien chargée, sinon il n'y aurait pas mon fond blanc mais aucune image WMS n'est chargée.

Heureusement, la documentation de cette pre-release d'Adobe Air est déjà bien fournie. Et on y trouve un chapitre parlant des autorisations que l'on peut donner à l'application notamment au niveau du Debugging. Si vous avez un portable Android, cela correspond à l'écran qui vous avez quand vous allez installer une application. On vous annonce que l'application pourra accéder à Internet, récupérer vos informations de géolocalisation, … Et bien vous si vous souhaitez utiliser certains services dans votre application, vous devrez l'indiquer à l'application.

En l'occurrence, pour télécharger les images du WMS, il faut que l'application soit autorisée à accéder à Internet. Cela se fait dans le fichier descripteur XML de votre application. La plupart des tags sont commentés à la fin du fichier. Modifiez donc le XML pour avoir:

<android>
 <manifestAdditions>
 <manifest>
 <![CDATA[
 <uses-permission android:name="android.permission.INTERNET" />
 ]]>
 </manifest>
 </manifestAdditions>
</android>

Il en existe d'autres, pour cela, reportez-vous à la documentation disponible sur le site de prerelease d'Adobe.

Compilation, transfert et test sur l'émulateur:

map-android-3

Exactement ce que je souhaitais avoir, le même code sur du Web et sur du natif Android! La carte est navigable, tout se comporte comme prévu. Voilà, je vais faire des tests sur des applications plus costaudes mais c'est déjà un bon début!

Articles similaires

Commentaires (10) Trackbacks (0)
  1. slt,
    quelqu'un sait comment faire fonctionner les web services sur l'emulateur d'android
    mon application fonctionne correctement sur le flash builder
    j'ai changé les permissions en

    MXML:
    1. <android>
    2.  <manifestAdditions>
    3.  <manifest>
    4.  <data>
    5.  <![CDATA[
    6.    <uses-permission android:name="android.permission.INTERNET"/>
    7.           <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    8.           <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    9.           <uses-configuration android:reqFiveWayNav="true"/>
    10.           <supports-screens android:normalScreens="true"/>
    11.           <uses-feature android:required="true" android:name="android.hardware.touchscreen.multitouch"/>
    12.  ]]>
    13.  </data>
    14.  </manifest>
    15.  </manifestAdditions>
    16. </android>

    j'ai aussi changé le "localhost" de la cible en l'ip locale et j'ai chargé mon service web sur l'IIS
    au niveau de l'emulateur l'application se lance normalement mais les services web ne fonctionnent pas !!!

  2. Salut,
    quand tu dis qu'ils ne fonctionnent pas, c'est-à-dire? ils passent dans le fault? quelle est l'erreur renvoyée? Est-ce que tu es sûr que ton téléphone arrive à joindre la machine sur laquelle tu souhaites interroger le WS (vérifier les bloquages de ports niveau firewall & co).

    Fabien

  3. il ne se passe rien quand je fait appel aux web services ... y'a pas d'erreurs renvoyés
    je pense qu'il y'a un blocage quelque part mais je ne sais pas exactement quoi changer
    j'ai désactivé mon parefeu et relancé l'application sur l'emulateur... toujours rien

    Youssef

  4. Etrange... Tu as aussi vérifié les restrictions du firewall de l'IIS ?

    Fabien

  5. oui
    y'a pas de configuration au niveau de l'emulateur ? non ?
    merci

  6. Pas que je sache. Avec la permission Internet, j'arrivais à accéder à des URLs web, pas à des serveurs sur le même réseau. Apparement, pour l'accès local, c'est un peu plus tricky car un Linux se cache derrière.
    Plus d'infos sur ce thread:
    http://www.mail-archive.com/android-developers@googlegroups.com/msg46996.html

    Si tu trouves la solution, merci de laisser un commentaire :)
    Fabien

  7. oui j'ai fait le test avec ton StatesService et il fonctionne bien sur l'emulateur qui arrive à acceder au web service sans problèmes
    effectivement c'est au niveau local que ça se complique
    merci pour l'article mais j'avoue que je n'ai pas trop bien saisi :p ... je n'ai pas compris ce qu'on doit faire exactement pour remèdier à ce problème!! :)
    je m'y met

    Youssef

  8. j'ai renoncé a essayer de le faire fonctionner en local puisque je peut le mettre sur un serveur distant.
    mais pour ceux qui ont le même problème vous trouverez certainement des éléments de réponse dans la partie networking de :
    http://developer.android.com/guide/developing/tools/emulator.html
    y'a bcp de commandes a essayer

    Youssef

  9. J'espère pas trop faire mon boulet, mais c'est où qu'on met ce code ? Dans le descripteur AIR ou dans celui du APK ?

    Merci

  10. Salut,
    Cela se trouve dans le descripteur AIR. Effectivement dans la dernière version du SDK, le formattage des noeuds a été modifié mais le noeud pour l'autorisation Internet reste le même. Ne pas faire de copier-coller du code de cette page :)

    Fabien


Leave a comment

(required)

Aucun trackbacks pour l'instant