Za pomocą kamery Glass możesz robić zdjęcia i nagrywać filmy, a także wyświetlać ich podgląd w różnych przypadkach użycia.
Omówienie
Dostępne są 2 opcje przechwytywania obrazów lub filmów:
- Wywoływanie aktywności wbudowanej kamery za pomocą
startActivityForResult()
. W miarę możliwości użyj tej opcji. Stwórz własną logikę za pomocą interfejsu Android Camera API. Jeśli korzystasz z tej metody, postępuj zgodnie z tymi wskazówkami:
- Rób zdjęcia jednym kliknięciem aparatu i filmem z długiego kliknięcia, tak jak w przypadku Google Glass.
- Poinformuj użytkownika, czy zostało zrobione zdjęcie czy film.
- Podczas nagrywania pozostaw włączony ekran.
Udostępnianie aparatu systemowi Google Glass
Jeśli urządzenie korzysta z interfejsów API Androida w celu uzyskania dostępu do aparatu, tymczasowo zwolnij kamerę, gdy użytkownik naciśnie przycisk aparatu.
Zastępuj metodę
onKeyDown()
w swojej aktywności i przechwytuj przyciskiKEYCODE_CAMERA
, aby obsługiwać przyciski aparatu.Zwolnij kamerę i zwróć
false
, aby wskazać, że zdarzenie nie zostało przez Ciebie spożyte, aby uruchomić wbudowaną kamerę Google Glass.
Gdy zrobisz zdjęcie lub nagrasz film, Glass wróci do aktywności. W
onResume()
możesz potem odzyskać kamerę.@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. }
Robienie zdjęć lub nagrywanie filmów
zdjęcia;
Aby zrobić zdjęcie za pomocą wbudowanego oprogramowania Aparat Google:
- Wywołaj
startActivityForResult(Intent, int)
z akcją ustawioną jakoACTION_IMAGE_CAPTURE
. - W narzędziu
onActivityResult(int, int, android.content.Intent)
:- Upewnij się, że
requestCode
odpowiada kodowi żądania użytemu podczas uruchamiania intencji przechwytywania obrazu. - Upewnij się, że
resultCode
jest zgodny zRESULT_OK
. - W razie potrzeby pobierz ścieżkę do miniatury obrazu z fragmentu
Intent
kluczemEXTRA_THUMBNAIL_FILE_PATH
. - Ścieżka do pełnego obrazu jest dostępna w eksporcie
Intent
z kluczemEXTRA_PICTURE_FILE_PATH
. Gdy intencja przechwytywania obrazu zwróci kontrolę nad urządzeniem Glassware, obraz może nie być w pełni zapisany do pliku. Sprawdź, czy plik obrazu istnieje, lub użyj kataloguFileObserver
, aby monitorować jego katalog nadrzędny. Gdy pełny obraz będzie dostępny, wczytaj plik i użyj go w Glassware.
- Upewnij się, że
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();
}
}
Filmy
Aby nagrać film za pomocą wbudowanego oprogramowania Glass:
- Wywołaj
startActivityForResult(Intent, int)
z akcją ustawioną jakoACTION_VIDEO_CAPTURE
. - W narzędziu
onActivityResult(int, int, android.content.Intent)
:- Upewnij się, że
requestCode
jest zgodny z kodem żądania używanym podczas uruchamiania intencji przechwytywania filmów. - Upewnij się, że
resultCode
jest zgodny zRESULT_OK
. - W razie potrzeby uzyskaj ścieżkę do miniatury filmu z fragmentu
Intent
przyciskiemEXTRA_THUMBNAIL_FILE_PATH
, aby wyświetlić podgląd. - Ścieżka do nagranego filmu jest dostępna w dodatkowym elemencie
Intent
z kluczemEXTRA_VIDEO_FILE_PATH
.
- Upewnij się, że