준비
안드로이드 카메라 연결 관련해서 궁금해서 개발자 정보를 찾아봤습니다.
내용인 즉슨 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);
댓글 없음:
댓글 쓰기