09.02.2017 Views

creez-des-applications-pour-android

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

6.5 Le multimédia<br />

[[attention]] | À noter que la seconde méthode, celle avec postview, ne sera accessible que si<br />

vous avez activé la prévisualisation.<br />

On rencontre ici deux types de classes appelées en callback :<br />

— Camera.ShutterCallback est utilisée <strong>pour</strong> indiquer le moment exact où la photo est<br />

prise. Elle ne contient qu’une méthode, void onShutter().<br />

— Camera.PictureCallback est utilisée une fois que l’image est prête. Elle contient la méthode<br />

void onPictureTaken(byte[] data, Camera camera) avec l’image contenue<br />

dans data et la camera avec laquelle la photo a été prise.<br />

Ainsi, shutter est lancé dès que l’image est prise, mais avant qu’elle soit prête. raw correspond à<br />

l’instant où l’image est prête mais pas encore traitée <strong>pour</strong> correspondre aux paramètres que vous<br />

avez entrés. Encore après sera appelé postview, quand l’image sera redimensionnée comme<br />

vous l’avez demandé (ce n’est pas supporté par tous les appareils). Enfin, jpeg sera appelé dès<br />

que l’image finale sera prête. Vous pouvez passer null à tous les callbacks si vous n’en avez rien à<br />

faire :<br />

private void takePicture(Camera camera) {<br />

// Jouera un son au moment où on prend une photo<br />

Camera.ShutterCallback shutterCallback = new Camera.ShutterCallback() {<br />

public void onShutter() {<br />

MediaPlayer media = MediaPlayer.create(getBaseContext(), R.raw.sonnerie);<br />

media.start();<br />

// Une fois la lecture terminée<br />

media.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {<br />

public void onCompletion(MediaPlayer mp) {<br />

// On libère le lecteur multimédia<br />

mp.release();<br />

}<br />

});<br />

}<br />

} ;<br />

// Sera lancée une fois l'image traitée, on enregistre l'image sur le support externe<br />

Camera.PictureCallback jpegCallback = new Camera.PictureCallback() {<br />

public void onPictureTaken(byte[] data, Camera camera) {<br />

FileOutputStream stream = null ;<br />

try {<br />

String path = Environment.getExternalStorageDirectory() + "\\photo.jpg" ;<br />

stream = new FileOutputStream(path);<br />

stream.write(data);<br />

} catch (Exception e) {<br />

}<br />

} ;<br />

} finally {<br />

try { stream.close();} catch (Exception e) {}<br />

}<br />

431

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!