Aparat

Aparatem Google Glass możesz używać aparatu do robienia zdjęć i nagrywania filmów, a także do aby wyświetlać podgląd obrazu z kamery na różne sposoby, w różnych przypadkach użycia.

Omówienie

Dostępne są 2 opcje robienia zdjęć i nagrywania filmów:

  • Wywoływanie wbudowanej aktywności kamery przy użyciu startActivityForResult() Używaj tej opcji, jeśli to możliwe.
  • Stwórz własną logikę za pomocą Interfejs API aparatu Android. Jeśli korzystasz z tej metody, postępuj zgodnie z tymi wskazówkami:

    • Zrób zdjęcie po kliknięciu przycisku aparatu i nagraj film po długim kliknięciu, tak jak robi to Glass.
    • Poinformuj użytkownika, czy zdjęcie zostało zrobione, czy nagrano film.
    • Nie wyłączaj ekranu podczas przechwytywania.

Udostępnianie kamery systemowi Glass

Jeśli Twoje oprogramowanie Glassware uzyskuje dostęp do aparatu za pomocą interfejsów API Androida, tymczasowo zwalniać kamerę, gdy jest to możliwe, jeśli użytkownik naciska sprzęt. przycisk aparatu.

  1. Zastąp onKeyDown() w swojej aktywności i przechwytywać KEYCODE_CAMERA naciśnięcia przycisków aparatu.

  2. Zwolnij aparat i wróć na false, by pokazać, że nie został użyty , aby uruchomić wbudowaną kamerę Glass.

.
  1. Po zarejestrowaniu zdjęcia lub filmu Google Glass wraca do ekranu aktywności, w ramach której możesz odzyskać kamerę 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.
    }
    

Robienie zdjęć lub nagrywanie filmów

Obrazy

Aby zrobić zdjęcie przy użyciu wbudowanej aplikacji szkło do aparatu:

  1. Zadzwoń do nas startActivityForResult(Intent, int) z działaniem ustawionym jako ACTION_IMAGE_CAPTURE
  2. W onActivityResult(int, int, android.content.Intent):
      .
    1. Upewnij się, że pole requestCode jest zgodne z kodem żądania używanym podczas uruchamia intencję przechwytywania obrazu.
    2. Upewnij się, że pole resultCode jest zgodne z wartością RESULT_OK.
    3. Uzyskaj ścieżkę do miniatury obrazu z Intent z EXTRA_THUMBNAIL_FILE_PATH w razie potrzeby.
    4. Ścieżka do pełnego obrazu jest dostępna z Intent z EXTRA_PICTURE_FILE_PATH . Gdy intencja przechwytywania obrazu zwraca kontrolę na Glassware, obraz może nie być w pełni zapisany w pliku. Zweryfikuj że plik graficzny istnieje, lub użyj FileObserver aby monitorować jego katalog nadrzędny. Gdy pełny obraz jest prześlij plik i użyj go w Google 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();
    }
}

Filmy

Aby nagrać film wideo przy użyciu wbudowanej aplikacji Glassware:

  1. Zadzwoń do nas startActivityForResult(Intent, int) z działaniem ustawionym jako ACTION_VIDEO_CAPTURE
  2. W onActivityResult(int, int, android.content.Intent):
      .
    1. Upewnij się, że pole requestCode jest zgodne z kodem żądania używanym podczas uruchamia intencję przechwytywania filmu.
    2. Upewnij się, że pole resultCode jest zgodne z wartością RESULT_OK.
    3. Uzyskaj ścieżkę do miniatury filmu z Intent z EXTRA_THUMBNAIL_FILE_PATH aby w razie potrzeby wyświetlić podgląd.
    4. Ścieżka do nagranego filmu jest dostępna z Intent z EXTRA_VIDEO_FILE_PATH .