카메라

Glass 카메라를 사용하여 이미지와 동영상을 촬영하고 다양한 카메라 미리보기 스트림을 다양한 사용 사례의 문제를 예로 들 수 있습니다

개요

이미지 또는 동영상을 캡처하는 방법에는 두 가지가 있습니다.

  • 다음을 사용하여 내장 카메라 활동 호출 startActivityForResult() 가능하면 이 옵션을 사용하세요.
  • Google Cloud API를 사용하여 Android 카메라 API. 이 방법을 사용하는 경우 다음 가이드라인을 따르세요.

    • Glass와 마찬가지로 카메라 버튼을 클릭하여 사진을 찍고 길게 클릭하여 동영상을 찍습니다.
    • 사진을 촬영했는지 또는 동영상을 녹화했는지 사용자에게 표시합니다.
    • 캡처하는 동안 화면을 켜진 상태로 유지합니다.

Glass 시스템과 카메라 공유하기

Glass 소프트웨어에서 Android API를 사용하여 카메라에 액세스하는 경우 사용자가 하드웨어를 누르면 가능한 경우 일시적으로 카메라를 해제하세요. 카메라 버튼

  1. 이 onKeyDown() 드림 메서드를 호출하기 위해 KEYCODE_CAMERA 카메라 버튼 누름을 처리합니다.

  2. 카메라를 해제하고 false를 반환하여 이벤트를 전달하여 내장 Glass 카메라가 시작됩니다.

를 통해 개인정보처리방침을 정의할 수 있습니다.
  1. 이미지나 동영상을 캡처하면 Glass가 여기에서 카메라를 회수할 수 있으며 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.
    }
    

이미지 또는 동영상 캡처

이미지

내장된 카메라 Glass 소프트웨어를 사용하여 이미지를 캡처하려면 다음 단계를 따르세요.

  1. 전화걸기 startActivityForResult(Intent, int), 작업 세트: ACTION_IMAGE_CAPTURE
  2. onActivityResult(int, int, android.content.Intent): <ph type="x-smartling-placeholder">
      </ph>
    1. requestCode가 다음과 같은 경우에 사용된 요청 코드와 일치하는지 확인합니다. 시작됩니다
    2. resultCode가 RESULT_OK와 일치하는지 확인합니다.
    3. 이미지의 썸네일에 대한 경로를 Intent님의 는 EXTRA_THUMBNAIL_FILE_PATH 키를 누릅니다.
    4. 전체 이미지 경로는 Intent님의 는 EXTRA_PICTURE_FILE_PATH 키를 누릅니다. 이미지 캡처 인텐트가 Glass 소프트웨어의 경우 이미지가 파일에 완전히 기록되지 않을 수 있습니다. 확인 이미지 파일이 있는지 확인하거나 FileObserver 드림 를 사용하여 상위 디렉터리를 모니터링합니다. 전체 이미지가 파일을 로드하여 Glass 소프트웨어에서 사용할 수 있습니다.
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();
    }
}

동영상

내장된 카메라 Glass 소프트웨어를 사용하여 동영상을 캡처하려면 다음 단계를 따르세요.

  1. 전화걸기 startActivityForResult(Intent, int), 작업 세트: ACTION_VIDEO_CAPTURE
  2. onActivityResult(int, int, android.content.Intent): <ph type="x-smartling-placeholder">
      </ph>
    1. requestCode가 다음과 같은 경우에 사용된 요청 코드와 일치하는지 확인합니다. 동영상 캡처 인텐트를 시작합니다.
    2. resultCode가 RESULT_OK와 일치하는지 확인합니다.
    3. 동영상의 썸네일에 대한 경로를 Intent님의 는 EXTRA_THUMBNAIL_FILE_PATH 키를 눌러 미리보기 표시
    4. 녹화된 동영상의 경로는 Intent님의 는 EXTRA_VIDEO_FILE_PATH 키를 누릅니다.