반응형
단말에 있는 카메라 앱을 띄워주는 방법
앱에서 상당히 많이 사용하는 기능
인텐트를 사용하는 방법으로 안드로이드 폰의 기본 카메라 앱을 이용해서
촬영한 결과를 가져오는 방법과 직접 촬영하는 기능을 만드는 방법이 있다.
* 직접 촬영 기능을 구현할땐, 카메라 미리보기를 위해서는 영상을 실시간으로 보여주기 위해서는 성능이 중요해서 하드웨어 가속 기능을 사용할 수 있는 서피스뷰(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 |