LECTURE

안드로이드 폰의 기본 카메라 앱을 이용한 사진 촬영 (Intent)

단말에 있는 카메라 앱을 띄워주는 방법

앱에서 상당히 많이 사용하는 기능
인텐트를 사용하는 방법으로 안드로이드 폰의 기본 카메라 앱을 이용해서 촬영한 결과를 가져오는 방법과 직접 촬영하는 기능을 만드는 방법이 있다.

직접 촬영 기능을 구현할땐, 카메라 미리보기를 위해서는 영상을 실시간으로 보여주기 위해서는 성능이 중요해서 하드웨어 가속 기능을 사용할 수 있는 서피스뷰(SurfaceView)를 사용한다.

아래 소스는 안드로이드의 기본 앱을 이용(Intent)해서 촬영하는 예제 이다.

1. 레이아웃

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:onClick="onButtonCamera" />
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/imageView"
        android:layout_below="@+id/button"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
</RelativeLayout>

2. 파일자바소스

 ImageView imageView;
 File outputFile;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     imageView = (ImageView) findViewById(R.id.imageView);
     File storageDir = Environment.getExternalStorageDirectory();
     outputFile = new File(storageDir, "output.jpg");
 }
 public void onButtonCamera(View v) {
     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
     intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(outputFile));
     startActivityForResult(intent, 1001);
 }
 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     if(requestCode == 1001) {
         BitmapFactory.Options options = new BitmapFactory.Options();
         options.inSampleSize = 8;
         Bitmap bitmap = BitmapFactory.decodeFile(outputFile.getAbsolutePath(), options);
         imageView.setImageBitmap(bitmap);
     }
 }

3. 퍼미션

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.camera" android:required="true"></uses-permission>





답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.