Vous pouvez utiliser l'appareil photo Glass pour prendre des photos, enregistrer des vidéos afficher le flux d'aperçu de la caméra de différents cas d'utilisation.
Présentation
Deux options s'offrent à vous pour enregistrer des images ou enregistrer une vidéo:
- Appeler l'activité de caméra intégrée avec
startActivityForResult()
Utilisez cette option lorsque cela est possible. Créer votre propre logique avec API Android Camera : Si vous utilisez cette méthode, suivez les consignes ci-dessous:
- Prenez une photo après un clic sur le bouton de l'appareil photo et enregistrez une vidéo après un long clic, tout comme le fait Google Glass.
- Indiquez à l'utilisateur si une photo a été prise ou si une vidéo a été enregistrée.
- Gardez l'écran allumé pendant la capture.
Partager la caméra avec le système Glass
Si votre Glassware utilise les API Android pour accéder à l'appareil photo, libérer temporairement la caméra si possible si les utilisateurs appuient sur le bouton physique bouton de l'appareil photo.
Remplacez les
onKeyDown()
dans votre activité et intercepterKEYCODE_CAMERA
pour gérer les pressions sur les boutons de l'appareil photo.Relâchez la caméra et renvoyez
false
pour indiquer que vous n'avez pas utilisé la pour que la caméra Glass intégrée démarre.
Une fois l'image ou la vidéo capturée, les lunettes Glass reviennent à votre Vous pouvez récupérer la caméra
onResume()
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_CAMERA) { // Stop the preview and release the camera. // Execute your logic as quickly as possible // so the capture happens quickly. return false; } else { return super.onKeyDown(keyCode, event); } } @Override protected void onResume() { super.onResume(); // Re-acquire the camera and start the preview. }
Capture d'images ou de vidéos
Images
Pour prendre une image avec l'application Camera Glass intégrée, procédez comme suit:
- Appeler
startActivityForResult(Intent, int)
avec l'ensemble d'actions défini surACTION_IMAGE_CAPTURE
- Dans
onActivityResult(int, int, android.content.Intent)
: <ph type="x-smartling-placeholder">- </ph>
- Assurez-vous que
requestCode
correspond au code de requête utilisé lorsque qui démarre l'intent de capture d'image. - Assurez-vous que
resultCode
correspond àRESULT_OK
. - Obtenez le chemin d'accès à la vignette de l'image à partir de la
Intent
supplémentaire avec leEXTRA_THUMBNAIL_FILE_PATH
si nécessaire. - Le chemin d'accès à l'image complète est disponible dans la
Intent
supplémentaire avec leEXTRA_PICTURE_FILE_PATH
. Lorsque l'intent de capture d'image rend le contrôle à votre Glassware, il est possible que l'image ne soit pas complètement écrite dans le fichier. Valider que le fichier image existe ou utiliseFileObserver
pour surveiller son répertoire parent. Lorsque l'image complète est disponible, chargez le fichier et utilisez-le dans votre Glassware.
- Assurez-vous que
private static final int TAKE_PICTURE_REQUEST = 1;
private void takePicture() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, TAKE_PICTURE_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == TAKE_PICTURE_REQUEST && resultCode == RESULT_OK) {
String thumbnailPath = data.getStringExtra(Intents.EXTRA_THUMBNAIL_FILE_PATH);
String picturePath = data.getStringExtra(Intents.EXTRA_PICTURE_FILE_PATH);
processPictureWhenReady(picturePath);
// TODO: Show the thumbnail to the user while the full picture is being
// processed.
}
super.onActivityResult(requestCode, resultCode, data);
}
private void processPictureWhenReady(final String picturePath) {
final File pictureFile = new File(picturePath);
if (pictureFile.exists()) {
// The picture is ready; process it.
} else {
// The file does not exist yet. Before starting the file observer, you
// can update your UI to let the user know that the application is
// waiting for the picture (for example, by displaying the thumbnail
// image and a progress indicator).
final File parentDirectory = pictureFile.getParentFile();
FileObserver observer = new FileObserver(parentDirectory.getPath(),
FileObserver.CLOSE_WRITE | FileObserver.MOVED_TO) {
// Protect against additional pending events after CLOSE_WRITE
// or MOVED_TO is handled.
private boolean isFileWritten;
@Override
public void onEvent(int event, String path) {
if (!isFileWritten) {
// For safety, make sure that the file that was created in
// the directory is actually the one that we're expecting.
File affectedFile = new File(parentDirectory, path);
isFileWritten = affectedFile.equals(pictureFile);
if (isFileWritten) {
stopWatching();
// Now that the file is ready, recursively call
// processPictureWhenReady again (on the UI thread).
runOnUiThread(new Runnable() {
@Override
public void run() {
processPictureWhenReady(picturePath);
}
});
}
}
}
};
observer.startWatching();
}
}
Vidéos
Pour filmer une vidéo avec le Glassware intégré à l'appareil photo:
- Appeler
startActivityForResult(Intent, int)
avec l'ensemble d'actions défini surACTION_VIDEO_CAPTURE
- Dans
onActivityResult(int, int, android.content.Intent)
: <ph type="x-smartling-placeholder">- </ph>
- Assurez-vous que
requestCode
correspond au code de requête utilisé lorsque qui démarre l'intent de capture vidéo. - Assurez-vous que
resultCode
correspond àRESULT_OK
. - Obtenez le chemin d'accès à la miniature de la vidéo à partir de
Intent
supplémentaire avec leEXTRA_THUMBNAIL_FILE_PATH
pour afficher un aperçu si nécessaire. - Le chemin d'accès à la vidéo enregistrée est disponible à partir de la
Intent
supplémentaire avec leEXTRA_VIDEO_FILE_PATH
.
- Assurez-vous que