APPLICATIONS JAVA

publicité
APPLICATIONS
JAVA
Android
Partie IV
Ivan MADJAROV - 2014
Applications Java sous Android
IvMad, 2011-2015
4. Géolocalisation,
Géocodage,
Wi-Fi, Bluetooth,
Applications réseaux TCP
L'objectif principal de ce cours est de découvrir la programmation sous
Android, sa plate-forme de développement et les spécificités du développement
embarqué sur téléphone mobile. Le cours s’inspire, reprend, modifie et enrichi
des supports disponibles sur Internet.
2
Applications Java sous Android
IvMad, 2011-2015
3
Géolocalisation : Le principe
• La géolocalisation se base sur Global Positioning System (GPS)
• GPS compte 24 satellites répartis sur 6 orbites parcourues en 12h
pour couvrir le globe terrestre.
• Les satellites NAVSTAR (Navigation Satellite Timing And Ranging) sont
situés à 20184 km d'altitude et diffusent leur position et l'heure sur des
fréquences dans la bande des micro-ondes (~1500Mhz).
• Le GPS se synchronise puis calcule la distance avec le satellite grâce à
la différence de temps en émission et réception.
• distance = deltaT * c
(~vitesse de la lumière ~300000km/s)
• Le GPS fonctionne par triangulation.
1
4 satellites sont nécessaires pour
calculer la position et l'altitude.
3
2
Position
détectée
avec 3
satellites
sur une
surface 2D
Source: Yann Caron, Programmation Android - CNAM 2014
Applications Java sous Android
IvMad, 2011-2015
4
Java Android : Géolocalisation (1)
• Les
deux principaux éléments pour utiliser les services de
géolocalisation sont:
• Gestionnaire de localisation qui fournit l'accès aux services de localisation
• Fournisseur de localisation en fonction de la technologie utilisée pour la
localisation de l'appareil.
• Pour accéder au gestionnaire de localisation il faut obtenir l'instance de
LOCATION_SERVICE
par la méthode getSystemService:
String serviceName = Context.LOCATION_SERVICE;
LocationManager locationManager = (LocationManager)getSystemService(svcName);
• L'utilisation des services doit être déclarer dans le fichier
AndroidManifest.xml avec la ligne:
<uses‐permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
Applications Java sous Android
IvMad, 2011-2015
5
Java Android : Géolocalisation (2)
• Pour trouver le dernier emplacement connu par le GPS on s'adresse à
un fournisseur de localisation avec la méthode getLastKnownLocation:
String provider = LocationManager.GPS_PROVIDER;
Location loc = locationManager.getLastKnownLocation(provider);
• La méthode getLastKnownLocation ne demande pas au fournisseur de
localisation de mettre à jour la position courante!
• L'objet Location renvoyé inclut toutes les informations de position
disponibles dans le fournisseur:
• Latitude (méthode location.getLatitude();)
• Longitude (méthode location.getLongitude();)
• Altitude (méthode location.getAltitude();)
• Vitesse et heure à laquelle la position a été déterminée (getSpeed())
Applications Java sous Android
IvMad, 2011-2015
Java Android : Géolocalisation (3)
6
Applications Java sous Android
IvMad, 2011-2015
7
Java Android : Géolocalisation (4)
• L'exemple précédent s'appuie sur la dernière position connu
(getLastKnownLocation(provider))
• L'exemple peut évoluer en équipant l'application d'un écouteur de
changement de position pour qu'on puisse mettre à jour la position suivant
son évolution.
• Les mises à jour peuvent être programmées pour toutes les 2 secondes et
lorsqu'un déplacement est détecté de plus de 5 mètres.
• Plutôt que sélectionner un fournisseur (provider), on peut laisser
Androïd choisir le provider disponible le mieux adapté à
l'environnement ou aux critères déposés (objet Criteria)
• Créer une instance de LocationListever qui déclenchera la méthode
updateWithNewLocation chaque fois qu'un changement de position sera
détecté.
Applications Java sous Android
IvMad, 2011-2015
Java Android : Géolocalisation (5)
8
Applications Java sous Android
IvMad, 2011-2015
9
Java Android : Géolocalisation (6)
• En général une unité mobile Androïd propose des moyens de
déterminer sa géolocalisation:
• Par triangulation des stations GPS (Global Positioning System),
• Par recouvrement des cellules mobiles (3G/4G),
• Par le réseau Wifi.
• Pour une géolocalisation on implémente l'interface LocationListener.
• On s'adresse ensuite à l’objet LocationManager pour gérer l'abonnement
aux mises à jour des coordonnées GPS.
• Dans l'Activité (View) on surcharge 4 méthodes :
• onProviderEnabled est appelée quand une source de localisation est activée;
• onProviderDisabled est appelée quand une source de localisation est désactivée;
• onStatusChanged est appelée quand le statut d’une source change;
• onLocationChanged est appelée quand les coordonnées GPS changent.
Applications Java sous Android
IvMad, 2011-2015
10
Java Android : Géolocalisation (7)
• Pour s’abonner à la mise à jour des coordonnées GPS, il faut utiliser la
méthode requestLocationUpdates(String, long, float, LocationListener) qui
possède 4 arguments :
• Le provider utiliser pour recevoir les mises à jour des coordonnées
utilisateurs (GPS / NETWORK …)
• L'intervalle minimum entre deux notifications (en millisecondes)
• L'intervalle minimum entre deux notifications (en mètre)
• L’instance du LocationListener
• Il est conseillé de s’abonner aux mises à jour des coordonnées GPS
dans la méthode onResume et de se désabonner dans la méthode onStop
afin de stopper l’utilisateur des ressources de localisation alors que
l’application n’en a plus l’utilité, sinon le processus de mise à jour
continu est la consommation de la batterie est importante.
Applications Java sous Android
IvMad, 2011-2015
11
Java Android : Géolocalisation (8)
• Pour trouver les fournisseurs de localisation disponibles:
LocationManager.GPS_PROVIDER;
LocationManager.NETWORK_PROVIDER;
LocationManager.PASSIVE_PROVIDER;
// localisation par GPS
// localisation par Wi‐Fi
// localisation par GSM (2G/3G/4G)
• Le fichier AndroidManifest.xml doit être enrichi avec les permissions
requises pour accéder aux services de localisation, Internet et au GPS:
<uses‐permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses‐permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses‐permission android:name="android.permission.INTERNET" />
Applications Java sous Android
IvMad, 2011-2015
Java Android : Géolocalisation (9)
12
Applications Java sous Android
IvMad, 2011-2015
13
Java Android : Géocodage (1)
• Le géocodage traduit des adresses en coordonnées géographiques et
inversement avec la classe Geocoder dont l'utilisation demande deux
permissions dans le manifest de l'activité:
<uses‐library android:name="com.google.android.maps" />
<uses‐permission android:name="android.permission.INTERNET" />
• La classe Geocoder donne accès à deux fonctions de géocodage:
• Géocodage avant qui donne la latitude et la longitude d'une adresse;
• Géocodage inverse qui donne l'adresse en fonction de la latitude et la
longitude.
• Les fonctions renvoient une liste d'objets Address. La granularité de la liste
dépend des limites indiquées à l'appel.
Geodecoder geodecoder = new Geodecoder(getApplicationContext(),Local.getDefault());
List<Address> addresses = null;
Applications Java sous Android
IvMad, 2011-2015
Java Android : Géocodage (2)
14
Applications Java sous Android
IvMad, 2011-2015
15
Android : Wi-Fi (1)
• Le Wi-Fi est géré par un WifiManager.
• Le WifiManager représente un Android Wi-Fi Connectivity Service.
• configurer une connexion Wi-Fi,
• gérer une connexion en cours,
• scanner pour des points d'accès,
• enregistrer tout changement dans une connexion Wi-Fi.
• Le Wi-FiManager utilise la méthode getSystemService en précisant le type
de service en constante: Context.WIFI_SERVICE
String service = Context.WIFI_SERVICE;
WifiManager wifi = (WifiManager)getSystemService(service);
• L'autorisation pour l'utilisation du WiFiManager doit être inscrite dans
le fichier manifest du projet:
<uses‐permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses‐permission android:name="android.permission.CHANGE_WIFI_STATE"/>
Applications Java sous Android
IvMad, 2011-2015
16
Android : Wi-Fi (2)
• Le Wi-FiManager peut:
• activer ou désactiver la fonction Wi-Fi par la méthode setWifiEnabled,
• obtenir le statut actuel du Wi-Fi par la méthode getWifiState,
• vérifier si le Wi-Fi est activé avec la méthode isWifiEnabled.
if (!wifi.isWifiEnabled())
if (wifi.getWifiState() != WifiManager.WIFI_STATE_ENABLING)
wifi.setWifiEnabled(true);
• La méthode getWifiState() retourne un entier entre 0 et 4 pour indiquer
la situation en cours du WiFi de l'appareil :
0
1
2
3
4
‐
‐
‐
‐
‐
WIFI_STATE_DISABLING
WIFI_STATE_DISABLED
WIFI_STATE_ENABLING
WIFI_STATE_ENABLED
WIFI_STATE_UNKNOWN
Applications Java sous Android
IvMad, 2011-2015
17
Android : Wi-Fi (3)
• En mettant tout ensemble on vérifie l'état de l'appareil :
public class WiFiStateActivity extends Activity {
String[] wifiState = {"WIFI_STATE_DISABLING", "WIFI_STATE_DISABLED", "WIFI_STATE_ENABLING", "WIFI_STATE_ENABLED", "WIFI_STATE_UNKNOWN"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String service = Context.WIFI_SERVICE;
WifiManager wifi = (WifiManager)getSystemService(service);
Toast.makeText(this, "Wi‐Fi : " + wifiState[wifi.getWifiState()], Toast.LENGTH_LONG).show();
}
}
Applications Java sous Android
IvMad, 2011-2015
18
Android : Wi-Fi (4)
• Pour obtenir des informations détaillées sur une connexion, il faut se
référer à la méthode getConnectionInfo de la classe WifiInfo.
• La classe WifiInfo offre un certain nombre de méthodes pour
manipuler les paramètres du réseau Wi-Fi:
• getSSID : Retourne l'identificateur du réseau 802.11 en cours;
• getBSSID() : Retourne l'identificateur de base de ce réseau;
• getMacAddress() : Retourne l'adresse MAC de l'appareil;
• getIpAddress() : Retourne l'adresse IP de l'appareil en format 'int'. Une
conversion en format 'String' est alors nécessaire.
• getLinkSpeed() : Retourne le débit en Mbps
• getRssi() : Retourne le niveau de puissance reçu du réseau 802.11 connecté.
Applications Java sous Android
IvMad, 2011-2015
19
Android : Wi-Fi (5)
• Afficher les éléments d'une connexion Wi-Fi en ajoutant les
composants dans un StringBuilder par la méthode append()
Conversion d'un
numéro IP de
décimal en string
Applications Java sous Android
IvMad, 2011-2015
20
Android : Wi-Fi (6)
•
•
•
•
•
Avec le Wi-FiManager on peut procéder à la recherche des bornes WiFi (hotspot) dans le voisinage par la méthode startScan.
L'opération utilise un Broadcasr Receiver avec un Intent
SCAN_RESULTS_AVAILABLE_ACTION qui est passé en
paramètre pour assurer un traitement asynchrone et la prise du résultat
quand le scan a terminé.
On appelle la méthode getScanResults pour obtenir les résultats sous la
forme d'une liste d'objets ScanResult.
Chaque objet du type ScanResult comporte les détails de la connexion
repérée.
Le résultat du Scan est récupéré dans un objet de type List<E>. C'est
une collection d'éléments indexés à partir de zéro.
List<ScanResult> results = wifi.getScanResults();
Applications Java sous Android
IvMad, 2011-2015
21
Android : Wi-Fi (7)
• Retourne le nombre de hotspot détectés et le SSID avec le plus fort
signale à proximité
Applications Java sous Android
IvMad, 2011-2015
22
Android : Bluetooth (1)
• Bluetooth est un protocole d'interconnexion à de courtes distances, de
type "peer-to-peer" avec une bande passante faible. La communication est
cryptée entre les périphériques appariés.
• L'API Bluetooth permet de scanner et de lier les appareils entre eux et de
transférer des données.
• Les connexions Bluetooth sont gérées par les classes suivantes :
• BluetoothAdapter : est l'unité locale où l'application Bluetooth est lancée.
• BluetoothDevice : est le périphérique distant avec lequel on cherche à
communiquer.
• BluetoothSocket : fait une demande de connexion au périphérique distant par
l'appel de la méthode createRfcommSocketToServiceRecord.
• BluetoothServerSocket : installe un Socket Bluetooth serveur pour écouter les
demandes de connexion entrantes en utilisant la méthode
listenUsingRfcommWithServiceRecord.
Applications Java sous Android
IvMad, 2011-2015
23
Android : Bluetooth (2)
• Pour s'assurer que le périphérique possède le Bluetooth on procède à
une vérification rapide en instanciant la classe BluetoothAdapter. Le
retour de son objet va indiquer la présence ou non de cette option.
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null)
Toast.makeText(BluetoothActivity.this, "Pas de Bluetooth!", Toast.LENGTH_SHORT).show();
else
Toast.makeText(BluetoothActivity.this,
"Le Bluetooth est disponible", Toast.LENGTH_SHORT).show();
• Pour autoriser l'opération, il faut ajouter la permission d'accéder aux
API Bluetooth en ajoutant la ligne suivante dans le fichier
AndroidManifest.xml :
<uses‐permission android:name="android.permission.BLUETOOTH"/>
Applications Java sous Android
IvMad, 2011-2015
24
Android : Bluetooth (3)
• Le Bluetooth peut être disponible sur l'appareil mais non activé. On peut
demander l'autorisation à l'utilisateur d'activer cette option. Pour cela,
on appelle la méthode startActivityForResult avec un paramètre d'Intent
BluetoothAdapter.ACTION_REQUEST_ENABLE. On vérifie que le
Bluetooth n'est pas activé et on demande son activation :
private final static int BLUETOOTH_ACTIVATION = 1;
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
........................................
if (!bluetoothAdapter.isEnabled() {
startActivityForResult(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE), BLUETOOTH_ACTIVATION);
}
• Un dialog-box incitera l'utilisateur d'accepter ou non l'activation du
Bluetooth sur son appareil. Le résultat de sa décision est récupérable par
la méthode onActivityResult.
Applications Java sous Android
IvMad, 2011-2015
25
Android : Bluetooth (4)
• On surcharge la méthode onActivityResult pour savoir si le Bluetooth est
activé ou non. La méthode est appelée à la sortie de la boite de dialogue
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == BLUETOOTH_ACTIVATION) {
if (resultCode == RESULT_OK) {
Toast.makeText(BluetoothActivity.this, "Bluetooth est activé", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(BluetoothActivity.this, "Bluetooth non activé", Toast.LENGTH_SHORT).show();
} }
}
Applications Java sous Android
IvMad, 2011-2015
Android : Bluetooth (5)
26
Applications Java sous Android
IvMad, 2011-2015
27
Android : Bluetooth (6)
• Si on rend l'appareil Bluetooth détectable cela permet à d'autres appareils
de le découvrir et de se connecter par la suite. Pour cela, on utilise la
méthode startActivityForResult avec le paramètre Intent approprié :
startActivityForResult(new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE),
BLUETOOTH_SCAN);
• On obtient la liste des appareils déjà liés avec getBoundedDevices.
Set<BluetoothDevice> knownDevices = bluetoothAdapter.getBoundedDevices();
for (BluetoothDevice device : knownDevices) {
Log.v("BluetoothActivity", "appareil = " + devices.getName());
}
• Set : interface de collection pour des objets qui n'autorisent pas des
doublons dans l'ensemble, existe au moins un nul (un tableau d'objets).
• for-each : boucle qui accède à chaque élément d'une collection d'objets
comme dans un tableau (eg, ArrayList).
Applications Java sous Android
IvMad, 2011-2015
28
Android : Bluetooth (7)
• Le code complet (étudiez les instructions 'Set' et 'for') :
public class BluetoothDeviceListActivity extends Activity {
private final static int BLUETOOTH_SCAN = 1;
String s = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
startActivityForResult(new
Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE),BLUETOOTH_SCAN);
Set<BluetoothDevice> knownDevices =
bluetoothAdapter.getBondedDevices();
for (BluetoothDevice device : knownDevices) {
s += "appareil = " + device.getName();
}
Toast.makeText(BluetoothDeviceListActivity.this,"Les Bluetooth liés:
"+s,Toast.LENGTH_SHORT).show();
} }
Applications Java sous Android
IvMad, 2011-2015
29
Android : Bluetooth (8)
• La recherche d'appareils inconnus est un traitement asynchrone et
gourmant en énergie effectué par le Broadcast Receiver.
• Android permet de créer une classe qui implémente BroadcastReceiver pour recevoir
des Intents et appliquer des comportements spécifiques au code.
• L’interface BroadcastReceiver possède une seule méthode onReceive() qu'on doit
implémenter.
BroadcastReceiver bluetoothReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
Toast.makeText(BluetoothActivity.this, "New Device = " + device.getName(), Toast.LENGTH_SHORT).show();
}
} };
Applications Java sous Android
IvMad, 2011-2015
30
Android : BT (9) Mettre tout ensemble
Ajouter les
permissions dans le
fichier manifest.xml
Applications Java sous Android
IvMad, 2011-2015
31
IvMad, 2011-2015
32
Android : Réseau
• Routage et passerelle
Applications Java sous Android
Android : Réseau
• Échange d'informations entre client et serveur
Applications Java sous Android
IvMad, 2011-2015
33
Android : La Socket
• La
Socket (connecteurs réseau) représente une interface de
programmation pour les communications entre processus.
• Il existe généralement quatre types de sockets :
• Une socket datagram permet une communication bidirectionnelle qui n'est
pas séquencée. Un processus utilisant ce type de Socket peut recevoir les
données dans un ordre différent de l'ordre de départ.
• C'est le protocole UDP.
• Une socket stream permet une communication bidirectionnelle, sûre,
séquencée et un flux de données sans duplication pouvant entraîner une
fragmentation des paquets transmis.
• Il s'agit du protocole TCP.
• Une socket raw
• Une socket sequenced packet.
Applications Java sous Android
IvMad, 2011-2015
Android : Le rôle des Sockets
• Connexion à une machine distante
• Envoie et/ou Réception de données
• Fermeture d'une connexion
• Attachement à un port
• Acceptation d'une demande de connexion à un port local
• A un port est attribué un numéro allant de 1 à 65535
• Les ports de 1 à 1023 sont réservés aux services:
• FTP (21), HTTP (80), SMTP (25)
• Attente de demandes de connexion
34
Applications Java sous Android
IvMad, 2011-2015
35
Android : Le mode connecté (TCP)
• Les étapes côté Serveur:
• Instancier la classe ServerSocket et l’instruire à écouter sur un port
supérieur à 1024.
• Accepter les connexions par la méthode accept() et créer un objet
Socket pour référencer la nouvelle connexion.
• Passer la nouvelle connexion au programme approprié.
• Fermer la connexion par la méthode close().
• Les étapes côté Client:
• Se connecter au service approprié en instanciant la classe Socket et
en lui passant comme paramètres l’adresse du Serveur et le port
écouté.
• Lorsque l’échange est terminé fermer la connexion par la méthode
close().
Applications Java sous Android
IvMad, 2011-2015
Android : Le mode connecté (TCP)
• Le Client et le Serveur en mode connecté
36
Applications Java sous Android
IvMad, 2011-2015
37
Android : StrictMode pour TCP
• Dans une application Android, on doit éviter d'effectuer des opérations
lentes sur le thread de l'interface utilisateur (GUI).
• Les opérations lecture et écriture de fichiers et l'accès au réseau sont considérées
comme lentes, car le temps d'aboutir est indéfini, voir imprévisible.
• StrictMode est configuré pour une sécurité accrue, c.à.d. pour éviter de
faire des choses incorrectes. L'exception NetworkOnMainThreadException
est provoqué si l'accès réseau est effectué de l'interface utilisateur
(le thread principal de l'application).
• A partir de l'Android 3.0 on peut désactiver cette option pour faire des
tests plus facilement sur l'accès réseau en plaçant dans la méthode
onCreate() le code:
StrictMode.ThreadPolicy policy = new StrictMode.
ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
Applications Java sous Android
IvMad, 2011-2015
Android : Connexion TCP
Résoudre l'adresse IP locale
38
Applications Java sous Android
IvMad, 2011-2015
39
Android : Connexion TCP
Le serveur TCP reçoit le message du client TCP Android
Applications Java sous Android
IvMad, 2011-2015
40
Android : client-side TCP socket
Le
client
TCP
envoie un message
au serveur TCP par
l'interface graphique
Android
Applications Java sous Android
IvMad, 2011-2015
41
Android : client-side TCP socket
• Le fichier AndroidManifest.xml contient la description des ressources et
les autorisations d'accès au réseau Internet
L'autorisation
d'accéder au réseau
et configurée dans le
Manifest de
l'application
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ivmad.TCP.Client"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="15" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".ClientTCPAndroidActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Applications Java sous Android
IvMad, 2011-2015
42
Android : server-side TCP socket
Le serveur TCP reçoit le message du client Android
Le client TCP basé Android
envoie un message au Serveur
basé TCP
Le serveur TCP est
installé sur le port
1234 à l'adresse IP:
192.168.0.141
Applications Java sous Android
IvMad, 2011-2015
43
Android : Connexion réseau
• Avant de procéder à une connexion réseau, il faut s'assurer que cette
connexion est disponible. Un téléphone portable, un Smartphone ou
une tablette peut être hors réseau ou connexion Wifi désactivée.
• Cette disponibilité est testée avec les méthodes getActiveNetworkInfo() et
isConnected().
• La classe ConnectivityManager détecte les connexions Wifi, GPRS,
UMTS, etc.
public boolean isNetworkAvailable() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
// Si le réseau est indisponible networkInfo = null et la // méthode retourne false, sinon true.
if (networkInfo != null && networkInfo.isConnected()) {
return true;
}
return false;
}
Applications Java sous Android
IvMad, 2011-2015
44
Android : Connexion HTTP
• HttpURLConnection avec URL sont des classes disponibles depuis Java
2.0 standard.
• C'est un client léger d'usage général basé HTTP et approprié pour la
plupart des applications Android.
try {
URL url = new URL("http://139.124.26.245/neticien/");
HttpURLConnection con = (HttpURLConnection)url.openConnection();
// méthode qui lit un contenu sur le Stream d'entrée
readStream(con.getInputStream());
} catch (Exception e) {
e.printStackTrace();
}
Applications Java sous Android
IvMad, 2011-2015
45
Android : Connexion HTTP
• Lecture du Stream d'entrée dont la connexion est effectuée par
HttpURLConnection et URL.
private void readStream(InputStream in) {
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(in));
String line = "", str = "";
while ((line = reader.readLine()) != null) {
str += line;
}
Toast.makeText(getApplicationContext(),str,Toast.LENGTH_LONG).show();
} catch (IOException e) { e.printStackTrace();
} finally {
if (reader != null) { reader.close(); }
}
}
Applications Java sous Android
IvMad, 2011-2015
46
Android : Connexion HTTP
Le contenu de l'adresse:
http://139.124.26.245/neticien
Applications Java sous Android
IvMad, 2011-2015
47
Android : LogCat view
• Le développement pose toujours le problème de tester l'application
avant sa mise en "service". La View de l'application est en mode
graphique. Les logs permettent l'affichage en mode texte dans la
fenêtre du LogCat.
• Pour afficher les opérateurs 'log' dans Eclipse il faut activer le LogCat
view:
• Window->Show View->Other...->LogCat.
• Pour écrire un opérateur 'Log' il faut importer la classe
android.util.Log
‐
Log.d() ‐
Log.w() ‐
Log.e() ‐
• Log.i()
•
•
•
qui propose les méthodes:
"Info",
"Debug",
"Warning",
"Error".
• Exemple: Log.i("NameActivity", "Bonjour, ça marche!");
Téléchargement