Puoi utilizzare la fotocamera Glass per acquisire immagini e video, nonché per visualizzare lo stream di anteprima della videocamera per una varietà per diversi casi d'uso.
Panoramica
Per acquisire immagini o registrare video, hai a disposizione due opzioni:
- Chiama l'attività della videocamera integrata con
startActivityForResult()
Utilizza questa opzione quando possibile. Crea la tua logica con API Android Camera. Se utilizzi questo metodo, segui queste linee guida:
- Scatta una foto al clic del pulsante di una fotocamera e registra un video con un clic lungo, proprio come fa Glass.
- Indica all'utente se è stata scattata una foto o se è stato registrato un video.
- Consente di mantenere lo schermo acceso durante l'acquisizione.
Condivisione della videocamera con il sistema Glass
Se il tuo Glassware utilizza le API Android per accedere alla fotocamera, rilasciare temporaneamente la fotocamera quando possibile se gli utenti premeno il pulsante hardware pulsante della fotocamera.
Sostituisci il valore
onKeyDown()
nella tua attività e intercettaKEYCODE_CAMERA
per gestire le pressioni dei pulsanti della fotocamera.Rilascia la fotocamera e restituisci
false
per indicare che non hai consumato il per avviare la videocamera Glass integrata.
Una volta eseguita l'acquisizione dell'immagine o del video, Glass torna alla tua attività, dove potrai recuperare la videocamera
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. }
Acquisizione di immagini o video
Immagini
Per acquisire un'immagine utilizzando il software incorporato Camera Glassware:
- Chiama
startActivityForResult(Intent, int)
con l'azione impostata comeACTION_IMAGE_CAPTURE
. - In
onActivityResult(int, int, android.content.Intent)
:- Assicurati che
requestCode
corrisponda al codice di richiesta utilizzato quando iniziare l'intento di acquisire l'immagine. - Assicurati che
resultCode
corrisponda aRESULT_OK
. - Ottieni il percorso della miniatura dell'immagine dal
di
Intent
extra conEXTRA_THUMBNAIL_FILE_PATH
chiave, se necessario. - Il percorso dell'immagine completa è disponibile nel
di
Intent
extra conEXTRA_PICTURE_FILE_PATH
chiave. Quando l'intento di acquisizione dell'immagine restituisce il controllo In vetro, l'immagine potrebbe non essere stata scritta completamente nel file. Verifica che il file immagine esista o utilizza unFileObserver
per monitorare la sua directory superiore. Quando l'immagine completa viene disponibili, carica il file e utilizzalo in Glassware.
- Assicurati che
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();
}
}
Video
Per registrare un video utilizzando il software incorporato Camera Glassware:
- Chiama
startActivityForResult(Intent, int)
con l'azione impostata comeACTION_VIDEO_CAPTURE
. - In
onActivityResult(int, int, android.content.Intent)
:- Assicurati che
requestCode
corrisponda al codice di richiesta utilizzato quando iniziare l'intenzione di acquisizione video. - Assicurati che
resultCode
corrisponda aRESULT_OK
. - Ottieni il percorso della miniatura del video dal
di
Intent
extra conEXTRA_THUMBNAIL_FILE_PATH
per visualizzare un'anteprima, se necessario. - Il percorso del video registrato è disponibile nel
di
Intent
extra conEXTRA_VIDEO_FILE_PATH
chiave.
- Assicurati che