Fotocamera

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.

  1. Sostituisci il valore onKeyDown() nella tua attività e intercetta KEYCODE_CAMERA per gestire le pressioni dei pulsanti della fotocamera.

  2. Rilascia la fotocamera e restituisci false per indicare che non hai consumato il per avviare la videocamera Glass integrata.

di Gemini Advanced.
  1. 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:

  1. Chiama startActivityForResult(Intent, int) con l'azione impostata come ACTION_IMAGE_CAPTURE.
  2. In onActivityResult(int, int, android.content.Intent):
    1. Assicurati che requestCode corrisponda al codice di richiesta utilizzato quando iniziare l'intento di acquisire l'immagine.
    2. Assicurati che resultCode corrisponda a RESULT_OK.
    3. Ottieni il percorso della miniatura dell'immagine dal di Intent extra con EXTRA_THUMBNAIL_FILE_PATH chiave, se necessario.
    4. Il percorso dell'immagine completa è disponibile nel di Intent extra con EXTRA_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 un FileObserver per monitorare la sua directory superiore. Quando l'immagine completa viene disponibili, carica il file e utilizzalo in Glassware.
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:

  1. Chiama startActivityForResult(Intent, int) con l'azione impostata come ACTION_VIDEO_CAPTURE.
  2. In onActivityResult(int, int, android.content.Intent):
    1. Assicurati che requestCode corrisponda al codice di richiesta utilizzato quando iniziare l'intenzione di acquisizione video.
    2. Assicurati che resultCode corrisponda a RESULT_OK.
    3. Ottieni il percorso della miniatura del video dal di Intent extra con EXTRA_THUMBNAIL_FILE_PATH per visualizzare un'anteprima, se necessario.
    4. Il percorso del video registrato è disponibile nel di Intent extra con EXTRA_VIDEO_FILE_PATH chiave.