단말에 있는 카메라 앱을 띄워주는 방법
앱에서 상당히 많이 사용하는 기능
인텐트를 사용하는 방법으로 안드로이드 폰의 기본 카메라 앱을 이용해서
촬영한 결과를 가져오는 방법과 직접 촬영하는 기능을 만드는 방법이 있다.
* 직접 촬영 기능을 구현할땐, 카메라 미리보기를 위해서는 영상을 실시간으로 보여주기 위해서는 성능이 중요해서 하드웨어 가속 기능을 사용할 수 있는 서피스뷰(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;
File outputFile;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
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");
}
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);
}
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);
}
}
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>
<uses-permission android:name="android.permission.camera" android:required="true"></uses-permission>
'모바일앱개발' 카테고리의 다른 글
[부산] 제2회 엠게임이엔티 안드로이드 개발 창의 소프트웨어 교실 (with 앱툴즈) - 기본과정 (0) | 2015.11.19 |
---|---|
[행사안내] Google for Mobile에 귀하를 초대합니다! (0) | 2015.11.14 |
[부산] 제1회 엠게임이엔티 안드로이드 개발 창의 소프트웨어 교실 (with 앱툴즈) - 유료교육 (0) | 2015.09.23 |
[부산, 무료교육] 안드로이드스터디 16기 모집 안내 (0) | 2015.06.15 |
[부산] 안드로이드 앱 개발자 스터디 회원 모집 (~4.30 모집) - 안드로이드스터디 (0) | 2015.04.18 |
[부산] 애플 스위프트(Apple Swift) 스터디 회원 모집 안내 (0) | 2015.04.01 |
[서울] 안드로이드 앱 개발 스터디 회원 모집 (0) | 2015.03.23 |
[무료특강] 윈도우 8.1 앱 개발 부산 특강 사전 접수 (선착순 30명) (0) | 2014.03.11 |