Aperçu de l'API pour la communication réseau
-
Implantation de l'API java.net du JDK
- cf utilisation des sockets UDP et TCP en Java
-
cf utilisation de HttpURLConnection pour implanter un client HTTP
- attention à bien traiter les E/S bloquantes dans une thread secondaire et pas dans la thread principale
- utilisation conseillée de AsyncTask : communication devant être implantée dans la méthode doInBackground() (exécutée sur une thread secondaire)
-
Nouvelle API android.net :
- Informations sur la connectivité réseau
- Interface pour services VPN
-
Implantation de clients HTTP
- Client java.net.HttpURLConnection : à privilégier sur les versions récentes
- Client Apache HTTP (android.http) : moins maintenu désormais
- Bibliothèque Volley : utile pour des communications HTTP asynchrones portant sur un volume de données modéré
- Implantation d'un client RTP (Real-time Transport Protocol)
- Implantation d'un client SIP
- Gestionnaire Wi-Fi
- Téléphonie (appels cellulaires, SMS, MMS)
APIs pour implanter un client HTTP :
-
Classe java.net.HttpURLConnection : API historique Java de bas niveau pour l'implantation de clients HTTP
- L'utilisation de la méthode POST nécessite d'encoder les données à la main (fastidieux)
- Client Apache HTTP (android.http) : déprécié
- Bibliothèque Volley : utile pour des communications HTTP asynchrones portant sur un volume de données modéré
- Bibliothèque OkHttp : supporte également le protocole WebSocket
Permissions pour la communication réseau
- Pour accéder à toute machine extérieure : android.permission.INTERNET
- Depuis Android 8.0, les communications HTTP doivent être chiffrées par défaut (pour autoriser les communications en clair, on peut ajouter l'attribut android:usesCleartextTraffic="true" dans la balise application du manifeste)
Gestion des connexions
- Récupération du ConnectivityManager : Context.getSystemService(Context.CONNECTIVITY_SERVICE)
- Permissions nécessaires : android.permission.{ACCESS_NETWORK_STATE, ACCESS_WIFI_STATE}
-
Informations réseau : NetworkInfo[] getAllNetworkInfo()
- NetworkInfo indique le type de réseau (mobile, Wi-Fi, Wimax, Ethernet, Bluetooth), son état (demande DHCP, connecté, roaming...)
-
Réseau de la route par défaut : NetworkInfo getActiveNetworkInfo()
- Le terminal est "en ligne" si getActiveNetworkInfo().isConnected() est vrai
- Pour être informé des changements : réception d'Intent ConnectionManager.CONNECTIVITY_ACTION par un BroadcastReceiver (arguments EXTRA_{EXTRA_INFO, IS_FAILOVER, NETWORK_INFO, NETWORK_TYPE, NO_CONNECTIVITY, OTHER_NETWORK_INFO, REASON})