Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... ·...

74
Programmation Android M1 informatique Étienne Payet Département de mathématiques et d’informatique Ces transparents sont mis à disposition selon les termes de la Licence Creative Commons Paternité - Pas d’Utilisation Commerciale - Pas de Modification 3.0 non transcrit. Étienne Payet (DMI) Prog. Android – M1 informatique 1 / 74

Transcript of Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... ·...

Page 1: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Programmation AndroidM1 informatique

Étienne Payet

Département de mathématiques et d’informatique

Ces transparents sont mis à disposition selon les termes de la Licence Creative Commons Paternité - Pasd’Utilisation Commerciale - Pas de Modification 3.0 non transcrit.

Étienne Payet (DMI) Prog. Android – M1 informatique 1 / 74

Page 2: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Plan

1 Rotation de l’écran

2 Récepteurs de diffusion

3 Géolocalisation

4 Capteurs

5 Lecture audio

6 Gestes courants

7 Appareil photo

Étienne Payet (DMI) Prog. Android – M1 informatique 2 / 74

Page 3: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Rotation de l’écran

en cas de rotation de l’écran, l’activité courante est détruite (appel àonDestroy) puis une nouvelle activité adaptée à la nouvelle orientation estcréée (appel à onCreate, utilisation éventuelle d’une ressource alternative)

attention aux pertes potentielles de données (certaines valeurs peuventavoir changé pendant l’exécution de l’activité détruite par la rotation)

Étienne Payet (DMI) Prog. Android – M1 informatique 3 / 74

Page 4: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Forcer l’orientation de l’écran

dans AndroidManifest.xml :

<activity android:name=".MainActivity"android:label="@string/app_name"android:screenOrientation="landscape"/>

ou

<activity android:name=".MainActivity"android:label="@string/app_name"android:screenOrientation="portrait"/>

Étienne Payet (DMI) Prog. Android – M1 informatique 4 / 74

Page 5: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Éviter la perte de données : utiliser le Bundle

instance de la classe Bundle = conteneur associatif (clé,valeur) ou laclé est une chaîne de caractères (String)

chaque application qui tourne possède une instance de cette classe

le Bundle existe tant que l’application n’est pas quittée (i.e. tant quela backstack n’est pas vide)

la méthode onSaveInstanceState(Bundle) est appelée sur l’activitéavant sa destruction

la méthode onCreate(Bundle) est appelée sur la nouvelle activité

Étienne Payet (DMI) Prog. Android – M1 informatique 5 / 74

Page 6: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Éviter la perte de données : utiliser le Bundle

public class MainActivity extends Activity {

private int truc;

@Overrideprotected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);

if (savedInstanceState == null) truc = 2;else truc = savedInstanceState.getInt("monTruc");

}

@Overrideprotected void onSaveInstanceState(Bundle savedInstanceState) {

// Méthode appelée avant destruction de l’activitésuper.onSaveInstanceState(savedInstanceState);savedInstanceState.putInt("monTruc", truc);

}}

Étienne Payet (DMI) Prog. Android – M1 informatique 6 / 74

Page 7: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Exercice

Étienne Payet (DMI) Prog. Android – M1 informatique 7 / 74

Page 8: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Exercice

le menu options permet d’éditer le message

gérer la rotation de l’écran :

modes portrait et paysage autorisés

la rotation conserve le message et le nombre de changements courants

Étienne Payet (DMI) Prog. Android – M1 informatique 8 / 74

Page 9: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Plan

1 Rotation de l’écran

2 Récepteurs de diffusion

3 Géolocalisation

4 Capteurs

5 Lecture audio

6 Gestes courants

7 Appareil photo

Étienne Payet (DMI) Prog. Android – M1 informatique 9 / 74

Page 10: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Notion de diffusion

informer l’ensemble des applications de la survenue d’un événement :

appel entrantbatterie faible. . .

⇒ diffusion d’un objet de la classe Intent à l’ensemble des applications

Étienne Payet (DMI) Prog. Android – M1 informatique 10 / 74

Page 11: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

La classe Intent

un objet de la classe Intent :est une description d’un message ou d’une opération à exécutera pour attributs :

action = description générale (chaîne de caractères)- constantes de la classe Intent : ACTION_MAIN, ACTION_VIEW,ACTION_BATTERY_CHANGED, ACTION_SHUTDOWN, . . .

- de la forme "com.etienne.android.VIEW"

category = informations complémentaires- constantes de la classe Intent : CATEGORY_DEFAULT,CATEGORY_LAUNCHER, . . .

. . .

constructeurs : Intent(String action), . . .

Étienne Payet (DMI) Prog. Android – M1 informatique 11 / 74

Page 12: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Diffuser un objet de la classe Intent

méthode sendBroadcast de la classe Activity

Intent intent = new Intent("com.etienne.android.VIEW");

intent.putExtra("message", "Coucou !");

sendBroadcast(intent);

Étienne Payet (DMI) Prog. Android – M1 informatique 12 / 74

Page 13: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Prise en compte d’un Intent diffusé

toute application souhaitant considérer un Intent diffusé doit :

définir un filtre d’Intent qui précise ce souhait

écouter les messages diffusés grâce à un récepteur de diffusion

récepteur de diffusion =objet d’une sous-classe de BroadcastReceivercomposant de l’application, au même titre qu’une activité

Étienne Payet (DMI) Prog. Android – M1 informatique 13 / 74

Page 14: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Traitement d’un Intent diffusé

on définit une sous-classe de BroadcastReceiver :

public class MyBroadcastReceiver extends BroadcastReceiver {

@Overridepublic void onReceive(Context context, Intent intent) {

... // traitement de l’Intent diffusé}

}

Étienne Payet (DMI) Prog. Android – M1 informatique 14 / 74

Page 15: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Définition du filtre et création du récepteur

création d’un récepteur permanent :

AndroidManifest.xml<manifest ...>

<application ...>...<receiver android:name="MyBroadcastReceiver">

<intent-filter><action android:name="com.etienne.android.VIEW"/><category android:name="android.intent.category.DEFAULT"/>

</intent-filter></receiver>...

</application></manifest>

Étienne Payet (DMI) Prog. Android – M1 informatique 15 / 74

Page 16: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Définition du filtre et création du récepteur

création d’un récepteur temporaire :

MyBroadcastReceiver receiver = new MyBroadcastReceiver();

IntentFilter filter = new IntentFilter("com.etienne.android.VIEW");

registerReceiver(receiver, filter);

...

unregisterReceiver(receiver); // ne pas oublier, sinon erreur !

Étienne Payet (DMI) Prog. Android – M1 informatique 16 / 74

Page 17: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Exercice

écrire :

une application qui diffuse unIntent

une application qui réagit à ladiffusion en affichant un Toast

Étienne Payet (DMI) Prog. Android – M1 informatique 17 / 74

Page 18: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Plan

1 Rotation de l’écran

2 Récepteurs de diffusion

3 Géolocalisation

4 Capteurs

5 Lecture audio

6 Gestes courants

7 Appareil photo

Étienne Payet (DMI) Prog. Android – M1 informatique 18 / 74

Page 19: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Fournisseurs de position

plusieurs moyens de localisation : GPS, réseau mobile + WiFi, . . .

constantes prédéfinies de type String pour désigner un fournisseur :LocationManager.GPS_PROVIDERLocationManager.NETWORK_PROVIDERLocationManager.PASSIVE_PROVIDER

liste des fournisseurs activés :String locationContext = Context.LOCATION_SERVICE;

LocationManager locationManager =(LocationManager) getSystemService(locationContext);

List<String> providers = locationManager.getProviders(true);

Étienne Payet (DMI) Prog. Android – M1 informatique 19 / 74

Page 20: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Fournisseurs de position

permissions à déclarer dans AndroidManifest.xml :

localisation précise (par GPS par exemple)

<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/>

localisation approximative (par le réseau par exemple)

<uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/>

Étienne Payet (DMI) Prog. Android – M1 informatique 20 / 74

Page 21: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Obtenir sa position

String locationContext = Context.LOCATION_SERVICE;LocationManager locationManager =

(LocationManager) getSystemService(locationContext);

String provider = LocationManager.GPS_PROVIDER;

Location location = locationManager.getLastKnownLocation(provider);if (location != null) {

double latitude = location.getLatitude();double longitude = location.getLongitude();...

}

Étienne Payet (DMI) Prog. Android – M1 informatique 21 / 74

Page 22: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Détecter le changement de position

méthodes de la classe LocationManager :

public void requestLocationUpdates(String f, long t,

float d, LocationListener l)

- f : fournisseur de position- t : temps minimum (millisecondes) entre deux mises à jour- d : distance minimum (mètres) entre deux mises à jour- l : écouteur qui reçoit les notifications

public void removeUpdates(LocationListener l)

- l : écouteur qui reçoit les notifications

Étienne Payet (DMI) Prog. Android – M1 informatique 22 / 74

Page 23: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Détecter le changement de position

public class MyActivity extends Activity {

private LocationManager locationManager;private String locationProvider =

LocationManager.GPS_PROVIDER;private LocationListener mListener;...

Étienne Payet (DMI) Prog. Android – M1 informatique 23 / 74

Page 24: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Détecter le changement de position...

@Overridepublic void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.main);

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

if (locationManager != null)mListener = new LocationListener() {

public void onLocationChanged(Location location) {displayPosition();

}public void onProviderDisabled(String provider) {}public void onProviderEnabled(String provider) {}public void onStatusChanged(String provider,

int status, Bundle extras) {}};

}...

Étienne Payet (DMI) Prog. Android – M1 informatique 24 / 74

Page 25: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Détecter le changement de position

...

@Overridepublic void onResume() {

super.onResume();if (locationManager != null) {

displayPosition();locationManager.requestLocationUpdates(

locationProvider, 6000, 100, mListener);}

}

@Overridepublic void onPause() {

if (locationManager != null)locationManager.removeUpdates(mListener);

super.onPause();}...

Étienne Payet (DMI) Prog. Android – M1 informatique 25 / 74

Page 26: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Détecter le changement de position

...

public void displayPosition() {String msg = null;

Location location =locationManager.getLastKnownLocation(locationProvider);

if (location != null)msg = String.format("(%.2f, %.2f)",

location.getLatitude(), location.getLongitude());else

msg = "position inconnue";

Log.v("Position", msg);

}} // fin de la classe MyActivity

Étienne Payet (DMI) Prog. Android – M1 informatique 26 / 74

Page 27: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Détecter le changement de position

une autre possibilité : utiliser les Google Play Services

http://developer.android.com/training/location/retrieve-current.html

http://developer.android.com/training/location/receive-location-updates.html

squelette de code

Étienne Payet (DMI) Prog. Android – M1 informatique 27 / 74

Page 28: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Un nouveau système de permissions depuis Android 6.0

https://developer.android.com/guide/topics/security/permissions.html

https://developer.android.com/training/permissions/requesting.html

Étienne Payet (DMI) Prog. Android – M1 informatique 28 / 74

Page 29: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Exercice

détection des changements deposition

l’affichage tient compte de lalangue

Étienne Payet (DMI) Prog. Android – M1 informatique 29 / 74

Page 30: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Alertes de proximité

objectif : indiquer qu’on se rapproche d’un point d’intérêt

un Intent est diffusé lorsque l’appareil entre ou sort d’une zonecirculaire centrée sur le point d’intérêt

l’Intent diffusé peut être capturé par un récepteur de diffusion (voirsection 2)

Étienne Payet (DMI) Prog. Android – M1 informatique 30 / 74

Page 31: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Ajout d’une alerte

méthode de la classe LocationManager :

public void addProximityAlert(double latitude, double longitude,float rayon, long expiration, PendingIntent pIntent)

latitude, longitude : coordonnées du point d’alerterayon : rayon (mètres) de la zone autour du point d’alerteexpiration : temps (millisecondes) de l’alerte, -1 pour une alertepermanentepIntent : pour générer l’Intent diffusé lorsque l’appareil entre/sortde la zone d’alerte

Étienne Payet (DMI) Prog. Android – M1 informatique 31 / 74

Page 32: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Retrait d’une alerte

méthode de la classe LocationManager :

public void removeProximityAlert(PendingIntent pIntent)

pIntent : le PendingIntent qui a été utilisé lors de l’appel àaddProximityAlert

Étienne Payet (DMI) Prog. Android – M1 informatique 32 / 74

Page 33: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Gestion d’une alerte

public class ProximityBroadcastReceiver extends BroadcastReceiver {

@Overridepublic void onReceive(Context context, Intent intent) {

String message;

String key = LocationManager.KEY_PROXIMITY_ENTERING;Boolean entering = intent.getBooleanExtra(key, false);

if (entering) message = "entree dans la zone";else message = "sortie de la zone";

Log.v("Message", message);Toast.makeText(context, message, Toast.LENGTH_LONG).show();

}

}

Étienne Payet (DMI) Prog. Android – M1 informatique 33 / 74

Page 34: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Gestion d’une alerte

<manifest ...>...<uses-permission

android:name="android.permission.ACCESS_FINE_LOCATION" />...<application ...>

...<receiver android:name="ProximityBroadcastReceiver" >

<intent-filter><action android:name="com.etienne.position.ProximityAlert"/><category android:name="android.intent.category.DEFAULT"/>

</intent-filter></receiver>

</application></manifest>

Étienne Payet (DMI) Prog. Android – M1 informatique 34 / 74

Page 35: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Gestion d’une alerte

public class MainActivity extends Activity {

private LocationManager locationManager;private PendingIntent proximityIntent;...@Overrideprotected void onCreate(Bundle savedInstanceState) {

...locationManager = (LocationManager) getSystemService(

Context.LOCATION_SERVICE);Intent intent = new Intent("com.etienne.position.ProximityAlert");proximityIntent = PendingIntent.getBroadcast(

this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);...

}

...

Étienne Payet (DMI) Prog. Android – M1 informatique 35 / 74

Page 36: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Gestion d’une alerte

@Overridepublic void onResume() {

...locationManager.addProximityAlert(-21.11, 55.53,

1000.0f, -1, proximityIntent);...

}

@Overridepublic void onPause() {

...locationManager.removeProximityAlert(proximityIntent);...

}

...} // Fin de la classe MainActivity

Étienne Payet (DMI) Prog. Android – M1 informatique 36 / 74

Page 37: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Exercice

Étienne Payet (DMI) Prog. Android – M1 informatique 37 / 74

Page 38: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Google Play Services

accès aux services Google (Maps, Google+, . . .) dans les applications

API fournie par le Google Play Services SDK

http://developer.android.com/google/play-services/index.html

Étienne Payet (DMI) Prog. Android – M1 informatique 38 / 74

Page 39: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Utilisation des Google Maps

https://developers.google.com/maps/documentation/android/start?hl=fr

compte Google nécessaire pour générer une clé et la lier au projet

Étienne Payet (DMI) Prog. Android – M1 informatique 39 / 74

Page 40: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Utilisation des Google Maps

créer une application faisant intervenir les classes :

GoogleMap : modélise une carte

MapFragment ou MapView pour l’affichage d’une carte

(MapFragment est plus simple à utiliser que MapView)

utiliser le template Google Maps Activity lors de la création du projetsous Android Studio

Étienne Payet (DMI) Prog. Android – M1 informatique 40 / 74

Page 41: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Exercice

un appui sur le bouton en haut àdroite permet de pointer laposition courante sur une carte

tester différents types de carte

Étienne Payet (DMI) Prog. Android – M1 informatique 41 / 74

Page 42: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Mouvements de la caméra

créer une instance de la classe CameraUpdate grâce à la classeCameraUpdateFactory :

CameraUpdateFactory.zoomBy(float)CameraUpdateFactory.newLatLng(LatLng). . .

utiliser les méthodes moveCamera(CameraUpdate) ouanimateCamera(CameraUpdate) pour bouger la caméra

la classe LatLng permet de créer des points : constructeurLatLng(double, double)

Étienne Payet (DMI) Prog. Android – M1 informatique 42 / 74

Page 43: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Marqueurs

GoogleMap map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();

map.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Coucou").snippet("Je suis ici"));

Étienne Payet (DMI) Prog. Android – M1 informatique 43 / 74

Page 44: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Exercice

Étienne Payet (DMI) Prog. Android – M1 informatique 44 / 74

Page 45: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Plan

1 Rotation de l’écran

2 Récepteurs de diffusion

3 Géolocalisation

4 Capteurs

5 Lecture audio

6 Gestes courants

7 Appareil photo

Étienne Payet (DMI) Prog. Android – M1 informatique 45 / 74

Page 46: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Capteurs

accéléromètre, gyroscope, capteur de pression, . . .

classe Sensor :

- Sensor.TYPE_ACCELEROMETER,

- Sensor.TYPE_GYROSCOPE,

- Sensor.TYPE_PRESSURE,- . . .

Étienne Payet (DMI) Prog. Android – M1 informatique 46 / 74

Page 47: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Gestion des capteurs

classe SensorManager pour gérer tous les capteurs

différents taux de rafraîchissement possibles :

- SensorManager.SENSOR_DELAY_FASTEST,

- SensorManager.SENSOR_DELAY_GAME,

- SensorManager.SENSOR_DELAY_NORMAL,

- SensorManager.SENSOR_DELAY_UI

Étienne Payet (DMI) Prog. Android – M1 informatique 47 / 74

Page 48: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Écouter un capteur

interface SensorEventListener

méthodes à implémenter :

public void onAccuracyChanged(Sensor sensor, int accuracy)

public void onSensorChanged(SensorEvent event)

Étienne Payet (DMI) Prog. Android – M1 informatique 48 / 74

Page 49: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Écouter un capteur

méthodes de la classe SensorManager pour lier un écouteur à un capteur :

public boolean registerListener(SensorEventListener ecouteur,Sensor capteur,int tauxRafraichissement)

public void unregisterListener(SensorEventListener ecouteur,Sensor capteur)

Étienne Payet (DMI) Prog. Android – M1 informatique 49 / 74

Page 50: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Exemple

public class MySensorActivity extends Activityimplements SensorEventListener {

private Sensor mAccelerometer;private SensorManager manager;private boolean accelSupported;

@Overridepublic void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

manager = (SensorManager) getSystemService(Service.SENSOR_SERVICE);

mAccelerometer = manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);}...

Étienne Payet (DMI) Prog. Android – M1 informatique 50 / 74

Page 51: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Exemple

...

@Overridepublic void onResume() {

super.onResume();accelSupported = manager.registerListener(

this, mAccelerometer, SensorManager.SENSOR_DELAY_GAME);}

@Overridepublic void onPause() {

if (accelSupported)manager.unregisterListener(this, mAccelerometer);

super.onPause();}...

Étienne Payet (DMI) Prog. Android – M1 informatique 51 / 74

Page 52: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Exemple

...@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) { ... }

@Overridepublic void onSensorChanged(SensorEvent event) {

switch (event.sensor.getType()) {case Sensor.TYPE_ACCELEROMETER:...}

}

} // fin de la classe MySensorActivity

Étienne Payet (DMI) Prog. Android – M1 informatique 52 / 74

Page 53: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Exercice

Étienne Payet (DMI) Prog. Android – M1 informatique 53 / 74

Page 54: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Exercice

choix du capteur : accéléromètre, gyroscope, magnétomètre

choix du taux de rafraîchissement : SENSOR_DELAY_FASTEST,SENSOR_DELAY_GAME, SENSOR_DELAY_NORMAL, SENSOR_DELAY_UI

listes déroulantes : voir la classe Spinner

Étienne Payet (DMI) Prog. Android – M1 informatique 54 / 74

Page 55: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Plan

1 Rotation de l’écran

2 Récepteurs de diffusion

3 Géolocalisation

4 Capteurs

5 Lecture audio

6 Gestes courants

7 Appareil photo

Étienne Payet (DMI) Prog. Android – M1 informatique 55 / 74

Page 56: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

La classe MediaPlayer

utilisée pour la lecture audio et vidéo

différentes sources possibles (fichier local, streaming sur Internet)

fichier local = ressource à placer dans le dossier res/raw

plusieurs formats peuvent être lus (WAV, MP3. . .)

Étienne Payet (DMI) Prog. Android – M1 informatique 56 / 74

Page 57: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Lecture d’un fichier son

méthodes de la classe MediaPlayer :

création d’un lecteur :public static MediaPlayer create (Context context,

int resid)

démarrage de la lecture : public void start ()

l’interface MediaPlayer.OnCompletionListener permet de définir uneméthode appelée lorsque la lecture du fichier est terminée

Étienne Payet (DMI) Prog. Android – M1 informatique 57 / 74

Page 58: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Interruption de la lecture

une instance de MediaPlayer peut monopoliser des ressourcessystème partagées avec d’autres applications (décodeur audio. . .)

règle : n’avoir qu’une seule instance de MediaPlayer et ne gardercette instance que si elle lit quelque chose

la méthode public void release () permet de détruire uneinstance de MediaPlayer et de libérer toutes les ressources systèmequi lui étaient allouées

Étienne Payet (DMI) Prog. Android – M1 informatique 58 / 74

Page 59: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Exemple

public class MonActivite extends Activity {// activité présentant un bouton play et un bouton stop

private MediaPlayer mPlayer;

@Overridepublic void onCreate(Bundle savedInstanceState) {

...}

// Méthode appelée si appui sur bouton stop:public void stop(View v) {

if (mPlayer != null) {mPlayer.release();mPlayer = null;

}}...

Étienne Payet (DMI) Prog. Android – M1 informatique 59 / 74

Page 60: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Exemple

...

// Méthode appelée si appui sur bouton playpublic void play(View v) {

stop();

mPlayer = MediaPlayer.create(this, R.raw.mon_fichier_son);

mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

public void onCompletion(MediaPlayer mp) {stop();

}}

);

mPlayer.start();}

...

Étienne Payet (DMI) Prog. Android – M1 informatique 60 / 74

Page 61: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Exemple

...

// Méthode appelée lors de la destruction de l’activité:@Overridepublic void onDestroy() {

super.onDestroy();stop();

}

} // fin de la classe MonActivite

Étienne Payet (DMI) Prog. Android – M1 informatique 61 / 74

Page 62: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Exercice

la balle verte se déplace sur l’écran enfonction de l’inclinaison de l’appareil,elle ne sort pas de l’écran

le ToggleButton active/désactive ledéplacement de la balle

les boutons -/+ modifient la vitesse

lorsque la balle touche le bord del’écran, un son est émis

vérouiller la rotation de l’écran (modeportrait uniquement)

Étienne Payet (DMI) Prog. Android – M1 informatique 62 / 74

Page 63: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Plan

1 Rotation de l’écran

2 Récepteurs de diffusion

3 Géolocalisation

4 Capteurs

5 Lecture audio

6 Gestes courants

7 Appareil photo

Étienne Payet (DMI) Prog. Android – M1 informatique 63 / 74

Page 64: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Capture d’une touche utilisateur

méthode onTouchEvent(MotionEvent e) des classes View et Activity

cette méthode renvoie true si l’événement est capturé et false sinon

voir les constantes :MotionEvent.ACTION_MOVEMotionEvent.ACTION_DOWN. . .

Étienne Payet (DMI) Prog. Android – M1 informatique 64 / 74

Page 65: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Exemple

public class MainActivity extends Activity {

...

@Overridepublic boolean onTouchEvent(MotionEvent event) {

int action = MotionEventCompat.getActionMasked(event);

switch(action) {case (MotionEvent.ACTION_DOWN):

Log.d(DEBUG_TAG,"Action DOWN");return true;

...default:

return super.onTouchEvent(event);}

}

Étienne Payet (DMI) Prog. Android – M1 informatique 65 / 74

Page 66: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Gestes courants

la classe GestureDetector définit les interfaces :

onGestureListener pour capturer les touches, les pressions longues,les mouvements de scroll. . .

onDoubleTapListener pour capturer les doubles taps et lesconfirmations de simples taps

ces interfaces déclarent des méthodes de la forme

boolean on<Evénement>(...)

qui doivent renvoyer true si on considère que l’événement en paramètre estcapturé et false sinon (et alors, l’événément est passé à un autre objetjusqu’à ce qu’il soit traité)

Étienne Payet (DMI) Prog. Android – M1 informatique 66 / 74

Page 67: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Exemple

public class MainActivity extends Activity implementsGestureDetector.OnGestureListener,GestureDetector.OnDoubleTapListener {

private static final String DEBUG_TAG = "Gestures";private GestureDetectorCompat mDetector;

@Overridepublic void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);

mDetector = new GestureDetectorCompat(this,this);mDetector.setOnDoubleTapListener(this);

}...

Étienne Payet (DMI) Prog. Android – M1 informatique 67 / 74

Page 68: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Exemple

...

@Overridepublic boolean onTouchEvent(MotionEvent event) {

this.mDetector.onTouchEvent(event);return super.onTouchEvent(event);

}

@Overridepublic boolean onDown(MotionEvent event) {

Log.d(DEBUG_TAG,"onDown: " + event.toString());return true;

}

@Overridepublic boolean onDoubleTap(MotionEvent event) {

Log.d(DEBUG_TAG, "onDoubleTap: " + event.toString());return true;

}...

}

Étienne Payet (DMI) Prog. Android – M1 informatique 68 / 74

Page 69: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Gestion du balayage (swipe)

utiliser la méthode onFling de GestureDetector.OnGestureListener

Étienne Payet (DMI) Prog. Android – M1 informatique 69 / 74

Page 70: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Gestion du balayage (swipe)

public class MainActivity extends Activity implementsGestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener {

private static final int SWIPE_MIN_DISTANCE = 120;private static final int SWIPE_THRESHOLD_VELOCITY = 200;

...

@Overridepublic boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) {

if (event1.getX() - event2.getX() > SWIPE_MIN_DISTANCE &&Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY)

// Left swipe...else if (event2.getX() - event1.getX() > SWIPE_MIN_DISTANCE &&

Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY)// Right swipe...

else if (event1.getY() - event2.getY() > SWIPE_MIN_DISTANCE &&Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY)

// Swipe up...else if (event2.getY() - event1.getY() > SWIPE_MIN_DISTANCE &&

Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY)// Swipe down...

return false;}...

}

Étienne Payet (DMI) Prog. Android – M1 informatique 70 / 74

Page 71: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Exercice

écrivez une application qui affiche un message à l’écran lorsque l’un desgestes gérés par la classe GestureDetector (simple/double tap, pressionlongue, fling. . . ) est reconnu

Étienne Payet (DMI) Prog. Android – M1 informatique 71 / 74

Page 72: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Exercice : jeu du taquin à 9 cases

https://fr.wikipedia.org/wiki/Taquin

le déplacement d’une case se fait parun mouvement de balayage (swipe)

un son est émis lorsqu’une case estdéplacée

menu options : recommencer la partieen cours, commencer une nouvellepartie et quitter le jeu

gérer la rotation de l’écran (modesportrait et paysage autorisés)

Étienne Payet (DMI) Prog. Android – M1 informatique 72 / 74

Page 73: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Plan

1 Rotation de l’écran

2 Récepteurs de diffusion

3 Géolocalisation

4 Capteurs

5 Lecture audio

6 Gestes courants

7 Appareil photo

Étienne Payet (DMI) Prog. Android – M1 informatique 73 / 74

Page 74: Programmation Android M1 informatiquelim.univ-reunion.fr/staff/epayet/Teaching/ProgMobiles_L3... · 2016. 10. 4. · Département de mathématiques et d’informatique CestransparentssontmisàdispositionselonlestermesdelaLicenceCreativeCommonsPaternité-Pas

Capture et sauvegarde d’une photo

2 possibilités :

utiliser un Intent pour invoquer un logiciel de capture existant déjàdans l’appareil

créer son propre logiciel de capture

détails :

http://developer.android.com/guide/topics/media/camera.html

Étienne Payet (DMI) Prog. Android – M1 informatique 74 / 74