La communication réseau Sources : Android Devloppers, Wikipedia Paris, 12/04/2016
Les interfaces de communication 2 Un caractéristique des smartphones et des tablettes tactiles : nous ne sommes plus dans un monde «connected less», mais il faut prendre en compte la mobilité! Des interfaces variées : Cellulaires : EDGE, 3G, 4G LAN : WiFi, Bluetooth Champs proches (Near Field) : NFC filaires : USB Les pilotes de ces interfaces et les piles protocolaires sont celles du noyau Linux classique (adaptations éventuelles pour l énergie ou la mémoire)
La programmation 3 La pile protocolaire maîtresse : Internet - IP/TCP/UDP. Pour la communication bas niveau, on utilise essentiellement les APIs standard de Java du paquetage java.net et les classes utilitaires de java.util : Socket, IOStreams, À réserver en priorité aux communications LAN Mais d autres APIs existent (WiFiDrirect)
La programmation 3 La pile protocolaire maîtresse : Internet - IP/TCP/UDP. Pour la communication bas niveau, on utilise essentiellement les APIs standard de Java du paquetage java.net et les classes utilitaires de java.util : Socket, IOStreams, Programmation réseau de «haut niveau» : HTTP est le protocole de choix! Une fois encore on utilise des librairies standard de Java : Url, HTTPConnexion Particulièrement adapté à la communication sur réseau cellulaire, simple à mettre en œuvre et à configurer
La programmation 4 On peut aussi lui préférer les APIs Apache des paquetages org.apache.http dont les implantations spécifiques pour Android se trouve dans les paquetages android.net.http. Pour certains protocoles spécifiques les paquetages android.net sont à considérer : (rtp, ntp, sip ) Enfin il est possible d utiliser des APIs orientées WebServices restfull grâce au support de certaines fonctionnalités comme le format JSON (org.json). Pour finir, il existe des APIs spécifiques à la connectivité des terminaux mobiles dans android.net.
J.-F. Susini 12/04/2016 Les autorisations 5 Une caractéristique des APIs réseaux : Elles nécessitent de déclarer des permissions d accès au réseau dans le Manifest Android. Pour accéder aux APIs Internet : <uses-permission android:name="android.permission.inte RNET"/> et pour accéder à l état des connexions réseau : <uses-permission android:name="android.permission.acce SS_NETWORK_STATE"/>
Les connexions HTTP 6 Les connexions réseau doivent se faire sur un thread différent du UIThread (tolérance jusqu à Android 3.0). L outil principal : java.net.httpurlconnection. obtenu à partir d un objet java.net.url via la méthode openconnection() : HttpURLConnection cnx = (HttpURLConnection)new URL(«http:// www.cnam.fr/ ").openconnection(); Pour spécifier la méthode : setrequestmethod() avec "GET", "POST"
Les connexions HTTP 7 Paramétrage de la requête en utilisant : addrequestproperty(). Pour envoyer des données avec la requête, on utilise un OutputStream obtenu par getoutputstream(). La requête est envoyé avec connect(). Savoir si la requête est satisfaite : getresponsecode() à comparer aux constantes de HttpURLConnection : HTTP_OK, HTTP_NOT_FOUND, HTTP_UNAUTHORIZED La lecture de la réponse consiste à lire un objet de type InputStream obtenu par getinputstream().
Le service système : ConnectivityManager 8 Il faut en premier lieu récupérer la référence de cet objet dans le contexte d exécution Android : getsystemservice() avec la constante Context.CONNECTIVITY_SERVICE. Pour récupérer les informations sur la connexion active (route par défaut) : getactivenetworkinfo(). Si pas de connexion active au moment de l appel -> null. Récupérer les informations sur toutes les connexions : getallnetworkinfo(). Enfin pour récupérer les infos sur un type de réseau :getnetworkinfo(). Avec TYPE_WIFI, TYPE_BLUETOOTH, TYPE_MOBILE, TYPE_MOBILE_MMS
Le service système : ConnectivityManager 9 Les objets NetworkInfo renseignent sur l état d une connexion réseau : getdetailedstate() et getstate(), isavailable(), isconnected(), isconnectedorconnecting(), isfailover() et isroaming(). Il est important de surveiller les connexions réseaux car leur qualité évolue dans le temps (par exemple en fonction des déplacements de l utilisateur). Enregistrer un BroadcastReceiver sur un changement de connexion peut-être important dans le comportement de l application.
Les Broadcast Receiver Sources : Android Developpers, Wikipedia Paris, 12/04/2016
Les Broadcast Receivers 11 Sous-classe de android.content.broadcastreciever Implantation d un bus logiciel à message pour Android Les événements sont des Intents, diffusés par des appels systèmes (Context.sendBroadcast(), Context.sendOrderedBroadcast()) Déclaration dans le fichier Manifest (élément receiver avec Intent-Filters + permissions) ou (Context.registerReciever()) Le traitement de l Intent par redéfinition de onrecieve() Attention : géré par l UIThread
12/04/2016 BroadcastReciever 12 Peut être déclaré par la balise <receiver> avec les <intent-filter> correspondant, dans le manifeste Android ou enregistré par l appel sur le contexte d exécution Android : registerreceiver(). Étend la classe BroadcastReceiver. La méthode importante est onreceive(). N étend pas Context mais reçoit le contexte Android en paramètre. Attention : est exécuté dans le UIThread => pas d opérations longues! Pour le réseau : CONNECTIVITY_ACTION.
Les Contents Providers Sources : Wikipedia, www.android.com Paris, 12/04/2016
Les Content Providers 14 Exposent des données mises à disposition par une application sous la forme d une ou plusieurs tables (la mise en forme est à la charge du Provider) Une table définit un type de donnée et chaque ligne une instance de ce type de donnée L accès aux données exportées se fait par l utilisation d un ContentResolver Accès via URI : content://package_name_provider/type/id requêtes : query, update, insert, delete
Les Content Providers 15 La connexion entre ContentProvider et ContentResolver se fait par IPC Requêtes sur les données similaires à SQL déclaration dans le manifest de l application : balise <provider> Initialisation à la première utilisation oncreate() Pas de callback particulière à la libération des ressources -> gérer la sauvegarde des données après chaque requête