검색결과 리스트
글
Kitkat 이후의 버전에서 SrufaceView를 활용하여 Camera 활용하기
안드로이드/카메라
2015. 2. 4. 00:57
기존에 사용하던 Camera 애플리케이션 코드를 Kitkat에 적용해서 수행해보니 갑자기 애플리케이션이 종료되어버리는 일이 벌어지더군요.확인해 본 결과 해당 부분에 문제가 발생하여 벌어진 일이었습니다.
android.hardware.Camera.setParameters
새로운 버전으로 바뀌게 되면서 설정되어 있던 해상도가 맞지 않는 경우 Error를 뿜어내는 듯 합니다. 이를 수정하여 애플리케이션 코드를 다시 구성해 보았습니다. 해당 코드는 Nexus5 KitKat 4.4.4에서 정상적으로 동작되는 것을 확인하였습니다.
먼저 시작하기 전에 애플리케이션에 다음과 같은 권한을 추가하셔야 합니다.
1 2 3 4 | <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="21" /> <uses-permission android:name="android.permission.CAMERA"/> | cs |
XML 레이아웃은 다음과 같이 구성해 줍니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation = "vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" tools:context=".MainActivity" > <SurfaceView android:id="@+id/surfaceView" android:layout_width="fill_parent" android:layout_height="fill_parent"> </SurfaceView> </LinearLayout> | cs |
끝으로 MainActivity 코드입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | package com.example.kcamera; import android.app.Activity; import android.hardware.Camera; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.Window; import java.io.IOException; public class MainActivity extends Activity { private SurfaceView surfaceView; private SurfaceHolder surfaceHolder; private Camera camera; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); surfaceView = (SurfaceView)findViewById(R.id.surfaceView); surfaceHolder = surfaceView.getHolder(); surfaceHolder.addCallback(surfaceListener); } private SurfaceHolder.Callback surfaceListener = new SurfaceHolder.Callback() { @Override public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub camera.release(); } @Override public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub camera = Camera.open(); try { camera.setPreviewDisplay(holder); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub Camera.Parameters parameters = camera.getParameters(); parameters.setPreviewSize(width, height); camera.startPreview(); } }; @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } | cs |
300x250
'안드로이드 > 카메라' 카테고리의 다른 글
안드로이드 Camera의 Framework 구조 (0) | 2015.08.27 |
---|---|
안드로이드 Framework에서 Camera 동작 원리 분석(4) (0) | 2015.05.01 |
안드로이드 Framework에서 Camera 동작 원리 분석(3) (0) | 2015.04.27 |
안드로이드 Framework에서 Camera 동작 원리 분석(2) (3) | 2015.04.26 |
안드로이드 Framework에서 Camera 동작 원리 분석(1) (2) | 2015.03.11 |