2017년 9월 24일 일요일

Android Camera


준비


안드로이드 카메라 연결 관련해서 궁금해서 개발자 정보를 찾아봤습니다.
내용인 즉슨 Camera class 는 이제 사용안하며 camera2 class를 사용하라고 합니다.
대신 camera2를 사용하려면 Android 5.0 L OS 부터 사용이 가능하다고 합니다.

https://developer.android.com/guide/topics/media/camera.html#considerations

Camera API


The Android framework includes support for various cameras and camera features available on devices, allowing you to capture pictures and videos in your applications. This document discusses a quick, simple approach to image and video capture and outlines an advanced approach for creating custom camera experiences for your users.
Note: This page describes the Camera class, which has been deprecated. We recommend using the newer class camera2, which works on Android 5.0 (API level 21) or greater. Read more about camera2 on our blog.

android.hardware.camera2


https://developer.android.com/reference/android/hardware/camera2/package-summary.html

예제는 our blog를 보면 된다고 합니다. 그 링크가 바로 아래 링크입니다. 내용은 크게 없으며 아래 Camera2 on Github 소스를 보라고 하네요.

our blog 정보
https://medium.com/google-developers/detecting-camera-features-with-camera2-61675bb7d1bf

Camera2 on Github

If you’re ready to give Camera2 a spin, the official Github sample is a great place to start. The sample goes even further, covering how to display a camera preview and take pictures.

github 링크
https://github.com/googlesamples/android-Camera2Basic?utm_campaign=adp_series_how_to_camera2_031016&utm_source=medium&utm_medium=blog

해당 소스를 가져왔다면 빌드가 잘되면 다행이지만, 간혹 안되는 경우가 있습니다.
FragmentCompat
때문인 경우가 있습니다.
이럴경우 build.gradle 에서 아래 내용을 추가 해줍니다.
compile 'com.android.support:support-v13:+'

GitHub 내용과 거의 동일하지만 작업했던 내용 공유합니다.
https://drive.google.com/open?id=0B9vAKDzHthQIRXNXMEVLd19NN0E


코드 분석

퍼미션

permission관련해서 예전에는 androidmanifest.xml에 추가만 하면 되었었지만, 현재는 runtime시 다시 획득해야만 사용가능한 permission이 있습니다.
기본적으로 xml에 아래 코드가 들어있어야합니다.
<uses-permission android:name="android.permission.CAMERA" />

openCamere 함수 내에서 카메라 관련 runtime 퍼미션을 요청합니다.
private void openCamera(int width, int height
requestCameraPermission

카메라 오픈

카메라 사용을 위해서는 카메라 서비스를 이용해서 openCamera를 호출 하여야합니다.
CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);
try {
    if (!mCameraOpenCloseLock.tryAcquire(2500, TimeUnit.MILLISECONDS)) {
        throw new RuntimeException("Time out waiting to lock camera opening.");
    }
    manager.openCamera(mCameraId, mStateCallback, mBackgroundHandler);









댓글 없음:

댓글 쓰기