Depuis Flex 4.5, j’ai commencé à m’amuser avec la création d’application Androïd en AIR, franchement c’est pas mal, on garde un certain nombre de nos automatismes, et on va assez vite pour faire quelque chose, bon après il faut le dire on se rend compte que certaines choses ne sont pas pareil sur un mobile que sur une application AIR de bureau, mais on gagne quand même du temps par rapport à une application Androïd faite de manière classique. De plus avec la 4.5.1, pas grand chose à changer pour être compatible pour iPhone ou BlackBerry Tablet. Que du bonheur donc.

Mais bien sur, un bonheur n’arrive jamais seul. Il y a donc quelques soucis parfois, des choses expliquées d’une façon dans la documentation officielle d’Adobe et qui finalement ne s’avèrent pas être comme ça.

Par exemple avec l’utilisation des touches « physiques » des mobiles (je mets des guillemets car sur mon Archos IT, elles sont totalement virtuelles, et sur mon GSii, ce n’est guère mieux…). En effet la touche menu, il n’y a pas de problème, on peut tout à fait l’activer sans effet secondaire. Mais la touche back, c’est une autre paire de manches, celle-ci s’active, malgré le preventDefault sauf si on déclare l’événement comme il faut…

Petit exemple, je veux appeler l’eventListener associé à la touche Back :

1
addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);

Et je défini ma fonction onKeyDown

1
2
3
4
5
6
7
8
protected function onKeyDown(event:KeyboardEvent):void
{
    if (event.keyCode == Keyboard.BACK)
    {
        event.preventDefault();
        trace("Back Pressed");
    }
}

Et voilà me direz vous, mais vous vous doutez bien que s’il y a article, ce n’est pas le cas… En effet, dans ce cas, la trace s’affiche bien, mais la touche BACK s’exécute (l’application se ferme si c’est sur l’écran principale ou on retourne à la vue précédente sinon). Ce n’est pas le cas prévu étant donné que l’on a utilisé la fonction preventDefault

Comment faire ?

Et bien tout simplement au lieu de définir en « ligne » l’ajout de l’eventlistener, on le met dans l’entête du fichier MXML

1
keyDown="onKeyDown(event)"

On ne change pas la fonction bien entendu.

Alors, heureux ?