Kamera

Glass kamerayı kullanarak resim ve video çekebilir, ayrıca kameranın önizleme akışını görüntüler. farklı kullanım alanları.

Genel Bakış

Resim veya video çekmek için iki seçeneğiniz vardır:

  • Yerleşik kamera etkinliğini çağırmak için startActivityForResult(). Mümkün olduğunda bu seçeneği kullanın.
  • Android Kamera API'si. Bu yöntemi kullanıyorsanız aşağıdaki yönergeleri uygulayın:

    • Glass'ın yaptığı gibi, kamera düğmesi tıklandığında fotoğraf, uzun bir tıklamayla da video çekebilirsiniz.
    • Kullanıcıya bir resim çekilip çekilmediğini veya videonun kaydedilip kaydedilmediğini belirtir.
    • Fotoğraf çekme sırasında ekranı açık tutun.

Kamerayı Glass sistemiyle paylaşma

Glassware'iniz kameraya erişmek için Android API'larını kullanıyorsa kullanıcılar donanıma basarsa mümkün olduğunda kamerayı geçici olarak serbest bırakın kamera düğmesi.

  1. Geçersiz kıl onKeyDown() işleminize ve kesmenizdeki KEYCODE_CAMERA kamera düğmesi tuşlarına basın.

  2. Kamerayı bırakın ve şunu izlemediğinizi belirtmek için false konumuna geri dönün yerleşik Glass kameranın başlatılmasını sağlar.

ziyaret edin.
  1. Resim veya video çekimi yapıldıktan sonra Glass, bir etkinlik olup olmadığına nasıl karar vereceğinizi öğreteceğim. 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.
    }
    

Resim veya video yakalama

Resimler

Yerleşik Kamera Cam Yazılımı'nı kullanarak resim çekmek için:

  1. Telefonla arama startActivityForResult(Intent, int) (İşlem şu şekilde ayarlanmış olarak) ACTION_IMAGE_CAPTURE.
  2. onActivityResult(int, int, android.content.Intent)'te:
    1. requestCode kodunun, aşağıdaki işlemde kullanılan istek koduyla eşleştiğinden emin olun: başlatmamız gerekir.
    2. resultCode değerinin RESULT_OK ile eşleştiğinden emin olun.
    3. Şu menüden resmin küçük resminin yolunu alın: Intent ekstra EXTRA_THUMBNAIL_FILE_PATH kullanın.
    4. Tam görüntüye giden yolu Intent ekstra EXTRA_PICTURE_FILE_PATH tuşuna basın. Görüntü yakalama amacı, kontrolü Bardak kullanıyorsanız resim, dosyaya tam olarak yazılmamış olabilir. Doğrula veya bir FileObserver dizinini takip eder. Tam resim olduğunda dosyayı yükleyin ve Glassware'inizde kullanın.
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();
    }
}

Videolar

Yerleşik Kamera Cam Yazılımı'nı kullanarak video çekmek için:

  1. Telefonla arama startActivityForResult(Intent, int) (İşlem şu şekilde ayarlanmış olarak) ACTION_VIDEO_CAPTURE.
  2. onActivityResult(int, int, android.content.Intent)'te:
    1. requestCode kodunun, aşağıdaki işlemde kullanılan istek koduyla eşleştiğinden emin olun: başlatmamız gerekir.
    2. resultCode değerinin RESULT_OK ile eşleştiğinden emin olun.
    3. Şuradan videonun küçük resmine giden yolu elde edin: Intent ekstra EXTRA_THUMBNAIL_FILE_PATH tuşuna basarak önizlemeyi görüntüleyebilirsiniz.
    4. Kaydedilen videoya giden yolu şuradan bulabilirsiniz: Intent ekstra EXTRA_VIDEO_FILE_PATH tuşuna basın.