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.
Überschreiben Sie die Methode
onKeyDown()
in Ihrer Aktivität und fangen SieKEYCODE_CAMERA
ab, um das Drücken der Kamerataste zu steuern.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.
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:
- Rufen Sie
startActivityForResult(Intent, int)
mit der AktionACTION_IMAGE_CAPTURE
auf. - In
onActivityResult(int, int, android.content.Intent)
:- Achten Sie darauf, dass
requestCode
mit dem Anfragecode übereinstimmt, der beim Starten des Bilderfassungs-Intents verwendet wird. resultCode
muss mitRESULT_OK
übereinstimmen.- Rufe den Pfad zur Miniaturansicht des Bildes aus dem
Intent
-Extra mit dem SchlüsselEXTRA_THUMBNAIL_FILE_PATH
ab, falls erforderlich. - Der Pfad zum vollständigen Image ist über die Extra-Funktion von
Intent
mit dem SchlüsselEXTRA_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 einenFileObserver
, 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.
- Achten Sie darauf, dass
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:
- Rufen Sie
startActivityForResult(Intent, int)
mit der AktionACTION_VIDEO_CAPTURE
auf. - In
onActivityResult(int, int, android.content.Intent)
:- Achten Sie darauf, dass
requestCode
mit dem Anfragecode übereinstimmt, der beim Starten des Intents für die Videoaufnahme verwendet wird. resultCode
muss mitRESULT_OK
übereinstimmen.- Rufe den Pfad zum Thumbnail des Videos aus dem
Intent
-Extra mit der TasteEXTRA_THUMBNAIL_FILE_PATH
ab, damit gegebenenfalls eine Vorschau angezeigt wird. - Der Pfad zum aufgezeichneten Video ist über das
Intent
-Extra mit dem SchlüsselEXTRA_VIDEO_FILE_PATH
verfügbar.
- Achten Sie darauf, dass