AIR Mobile – Accéder aux contacts sous iOS (Address Book)
Avec les API que propose AIR, vous pouvez faire beaucoup de choses (Geolocation, Accelerometer, …). Mais certaines APIs spécifiques aux mobiles comme les notifications ou l'accès aux contacts ne sont pas disponibles de base. Si vous avez suivi l'histoire, il sera tout de même possible d'accéder aux APIs natives du téléphone grâce au Native Code Extensions qui sont en prévision.
Seulement, si votre application a vraiment besoin de la fonctionnalité d'accès au carnet d’adresses, vous êtes bloqué. Pour cette API en particulier, il y a tout de même un moyen d'y accéder. Pour cela, on ne va pas passer par l'API de l'OS mais on va aller taper directement sur la base de données interne. Cette base de données est une base SQLite sous iOS, vous pouvez donc l'attaquer avec AIR. Le fichier en question se trouve à l'emplacement suivant:
/private/var/mobile/Library/AddressBook/AddressBook.sqlitedb
Je n'ai pas regardé mais cela doit être la même chose pour Android. Pour vous aider dans cette opération, Julian Dolce a créé une librairie qu'il a nommé "as3iphone" sur Google Code:
http://code.google.com/p/as3iphone/
Cette librairie a été mise en ligne en Mars 2010 mais personne n'avait l'air de l'avoir remarquée ^^.
Vous pouvez donc aller chercher les sources directement. Le site manque cruellement de documentation, il faut donc aller fouiller dans les sources pour comprendre le fonctionnement de toute cette affaire.
Le point d'entrée principal est la classe IPhoneAddressBook qui comme son nom ne l'indique pas, n'est pas une Interface:
Grâce aux méthode open, getContactList (qui renvoie un AddressBookEvent une fois terminée), getContact(id), getIM, …, vous allez pouvoir récupérer directement les informations de la base. Si vous êtes un peu curieux, vous pouvez aller voir le reste des classes. Vous remarquerez le travail de fourmi effectuée pour réaliser la deserialization binaire des informations stockées dans la base!
Voilà, je ne l'ai pas testée mais si vous n'avez pas le temps d'attendre les extensions natives pour AIR, cette librairie pourra faire l'affaire
Articles similaires
- Le projet Spoon cherche des volontaires
- Adobe et Facebook s'associent pour créer une librairie AS3 pour Facebook Platform
- AIR pour iPhone – Packager For iPhone pas encore compatible avec Air 2.5, soyons patients…
- Composants AS3 imitant la GUI Apple (bouton, input, slider, progress bar, …)
- AIR pour Android – Visualiser la géolocalisation GPS sur Google Maps avec Air






23 mai 2011
Bonjour,
Quand sont prevues ces extensions natives pour AIR?
.J'utilise les exemples de James Ward pour echanger avec les appli natives android.
Ces extensions seront elles integreés dans flex/flash ou faudra t'il encore trafiquer?
Un lien d'infos, please.
merci.
23 mai 2011
Bonjour,
Pour l'instant, les extensions natives sont encore sous la NDA (non disclosure agreement), personne ne peut donc en parler. Tout ce que je peux dire, c'est que le processus est bien fait, on est pas en train de trafiquer ni de bidouiller quoi que ce soit. Pour info, ce ne sera pas le même processus (c'est précisé dans l'article de JW, c'est juste un un hack) que celui de James Ward mais plutôt celui des extensions Adobe AIR for TV.
Fabien
23 mai 2011
merci Fabien,
on etait bloqué pour faire de reelles applications mobiles et utiliser les equivalents des Intents d'Android par exemple .
Vivement!
23 mai 2011
Rien à voir avec le sujet de l'article mais Je profite de tes connaissances pour te demander si tu sais comment transformer une methode non asynchrone en methode asynchrone.
Par exemple lors de traitements sur un BitmapData, je dois alerter l'utilisateur de ces traitements par une barre de progression mais malheuresement as3 ne gere pas le multi tread.
J'ai essayé avec un timer mais cela ne fonctionne pas.
En tous cas ,je penses qu'on est nombreux à demander cette info.
23 mai 2011
Salut,
Alors ce n'est effectivement pas un cas isolé mais si tu veux faire de l'asynchrone en AS3, tu as les "green thread" qui font un worker sur l'évènement ENTER_FRAME. Le problème est qu'il faut que tu puisses découper ton traitement en sous traitement. Si par exemple tu fais un deflate() sur ByteArray (décompression ou compression, je sais plus), tu n'as qu'une opération, tu ne peux pas la découper pour faire un progress.
En principe, si ton code contient une boucle (genre une boucle qui fait le dessin de N géométries), tu peux créer un système de threading qui consiste à effectuer une partie du traitement sur chaque frame assez facilement.
Fabien
23 mai 2011
merci pour les green thread.
un lien et exemple pour encodage image en ByteArray pour ceux à qui ca interese
http://blog.generalrelativity.org/actionscript-30/green-threads/