Kamera

Sie können mit der Glass-Kamera Bilder und Videos aufnehmen und auch den Vorschaustream der Kamera für eine Vielzahl von Anwendungsfällen anzeigen lassen.

Übersicht

Sie haben zwei Möglichkeiten, Bilder oder Videos aufzunehmen:

  • Aufrufen der integrierten Kameraaktivitäten mit startActivityForResult(). Verwenden Sie nach Möglichkeit diese Option.
  • Eigene Logik mit der Android Camera API erstellen Beachten Sie bei der Verwendung dieser Methode die folgenden Richtlinien:

    • Machen Sie ein Foto mit einem Klick auf die Kameraschaltfläche und ein Video mit einem langen Klick, genau wie Glass.
    • Geben Sie dem Nutzer an, ob ein Bild oder ein Video aufgenommen wurde.
    • Lassen Sie den Bildschirm während der Aufnahme eingeschaltet.

Kamera für das Glass-System freigeben

Wenn Ihre Glassware die Android APIs für den Zugriff auf die Kamera verwendet, lassen Sie die Kamera nach Möglichkeit vorübergehend los, wenn Nutzer die Taste an der Hardwarekamera drücken.

  1. Überschreiben Sie die Methode onKeyDown() in Ihrer Aktivität und fangen Sie KEYCODE_CAMERA ab, um das Drücken der Kamerataste zu steuern.

  2. Lassen Sie die Kamera los und geben Sie false zurück, um anzugeben, dass Sie das Ereignis nicht verbraucht haben, damit die integrierte Glass-Kamera startet.

  1. Nach der Bild- oder Videoaufnahme kehrt Glass zu Ihrer Aktivität zurück. Anschließend können Sie die Kamera in onResume() zurückfordern.

    @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.
    }
    

Bilder oder Videos aufnehmen

Bilder

So nehmen Sie ein Bild mit der integrierten Kamera auf:

  1. Rufen Sie startActivityForResult(Intent, int) mit der Aktion ACTION_IMAGE_CAPTURE auf.
  2. In onActivityResult(int, int, android.content.Intent):
    1. Achten Sie darauf, dass requestCode mit dem Anfragecode übereinstimmt, der beim Starten des Bilderfassungs-Intents verwendet wird.
    2. resultCode muss mit RESULT_OK übereinstimmen.
    3. Rufe den Pfad zur Miniaturansicht des Bildes aus dem Intent-Extra mit dem Schlüssel EXTRA_THUMBNAIL_FILE_PATH ab, falls erforderlich.
    4. Der Pfad zum vollständigen Image ist über die Extra-Funktion von Intent mit dem Schlüssel EXTRA_PICTURE_FILE_PATH verfügbar. Wenn der Intent für die Bilderfassung die Kontrolle an Ihr Glassware zurückgibt, ist das Image möglicherweise nicht vollständig in die Datei geschrieben. Prüfen Sie, ob die Image-Datei vorhanden ist, oder verwenden Sie einen FileObserver, um das übergeordnete Verzeichnis zu überwachen. Wenn das vollständige Bild verfügbar ist, laden Sie die Datei und verwenden Sie sie in Ihrer 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();
    }
}

Videos

So nehmen Sie ein Video mit der integrierten Kamera auf:

  1. Rufen Sie startActivityForResult(Intent, int) mit der Aktion ACTION_VIDEO_CAPTURE auf.
  2. In onActivityResult(int, int, android.content.Intent):
    1. Achten Sie darauf, dass requestCode mit dem Anfragecode übereinstimmt, der beim Starten des Intents für die Videoaufnahme verwendet wird.
    2. resultCode muss mit RESULT_OK übereinstimmen.
    3. Rufe den Pfad zum Thumbnail des Videos aus dem Intent-Extra mit der Taste EXTRA_THUMBNAIL_FILE_PATH ab, damit gegebenenfalls eine Vorschau angezeigt wird.
    4. Der Pfad zum aufgezeichneten Video ist über das Intent-Extra mit dem Schlüssel EXTRA_VIDEO_FILE_PATH verfügbar.