본문 바로가기

컴퓨터학원(복습)(수료)

자바(JAVA)기반 안드로이드 웹&앱 개발 48일차 (2) (카메라, 음악파일재생)

[카메라로 사진 찍어 저장하기]

1. 카메라는 단순히 사진을 찍는 용도로 사용되지만 최근에는 카메라 미리보기 화면에 여러 가지 정보를 더 표시하거나 카메라로 보는 영상이나 이미지를 앱의 다른 기능에 활용하는 경우도 많습니다.

2. 카메라로 사진을 찍기 위해 사용되는 방법은 크게 두 가지로 나눌 수 있습니다.

..1) 인텐트로 단말의 카메라 앱을 실행한 후 결과 사진을 받아 처리하기

..2) 앱 화면에 카메라 미리보기를 보여주고 직접 사진을 찍어 처리하기

3. 스마트폰 단말에는 카메라 앱이 미리 설치되어 있는데 이 앱을 사용하면 가장 간단하게 다른 기능의 앱을 구현할 수 있습니다. 단말의 카메라 앱은 다른 개발자가 미리 만들어 설치해둔 것이므로 여러분이 만들려는 앱애서 카메라 앱의 화면을 띄우려면 인텐트를 만들어 시스템에 요청하면 됩니다.

※ 카메라로 사진 찍어 저장하기 예시

☞ takePicture() 메서드는 사진을 찍은 후에 결과물을 저장할 파일을 만드는 메서드입니다.

☞ createFile() 메서드는 capture.jpg 라는 이름으로 SD 카드에 파일을 만듭니다.

☞ 이렇게 만든 파일을 카메라 앱이 사용할 때는 다른 앱에서 파일을 공유해야 하므로 내용 제공자(Content Provider)를 만들어 해당 폴더를 공유할 수 있게 해야 합니다.

☞ 인텐트 객체를 만들었다면 startActivityForResult() 메서드를 이용해서 시스템으로 인텐트 객체를 전달합니다.

☞ resolveActivity() 메서드는 인텐트에서 지정한 액티비티가 있는지를 확인할 때 사용합니다. 인텐트 객체를 만들어 카메라 앱을 실행한 후 사진을 찍고 나면 카메라 앱의 액티비티를 닫게 되는데 그 때 응답을 받는 부분은 onActivityResult() 입니다.

 

[화면에 카메라 미리보기 넣기]

1. 카메라 미리보기 기능을 구현하려면 일반 뷰(View)가 아니라 서피스뷰를 사용해야 합니다. 그런데 서피스뷰는 서피스홀더(SurfaceHolder) 객체에 의해 생성되고 제어되기 때문에 서피스뷰와 서피스 홀더 간의 관계를 이해해야 합니다. 서피스 뷰는 서피스홀더에 의해 제어된다고 생각하면 쉽습니다.

2. 만약 카메라 캑체를 만든 후에 미리보기 화면을 서피스뷰에 보여주고 싶다면 서피스홀더 객체의 setPreviewDisplay() 메서드로 미리보기를 설정해 주어야 합니다.

※ 화면에 카메라 미리보기 넣기 예시

 

[음악 파일 재생하기]

1. 멀티미디어를 위해 제공하는 미디어 API는 android.media 패키지에 들어 있습니다. 그 안의 여러 클래스들 중에서 핵심이 되는 것은 ‘미디어플레이어(MediaPlayer) 클래스’입니다.

2. 오디오 파일을 재생하려면 대상을 지정해야 하는데 이때 사용되는 데이터 소스 지정 방법은 크게 세 가지로 나눌 수 있습니다.

구분

설명

인터넷에 있는 파일 위치 지정

미디어가 있는 위치를 URL로 지정합니다.

프로젝트 파일에 포함한 후 위치 지정

앱을 개발하여 배포하는 과정에서 프로젝트의 리소스 또는 에셋(assets) 폴더에 넣은 후 그 위치를 지정합니다.

단말 SD카드에 넣은 후 위치 지정

단말에 넣어 둔 SD카드에 파일을 넣은 후

그 위치를 지정합니다.

3. 미디어플레이어로 음악 파일을 재생하는 과정은 세 단계로 나눌 수 있습니다.

..1) 대상 파일을 알려주는 것으로써 setDataSource() 메서드로 URL을 지정합니다.

..2) prepare() 메서드를 호출하여 재생을 준비합니다. 이 단계에서 미디어 플레이어는

.....대상 파일의 몇 프레임을 미리 읽어 들이고 정보를 확인합니다.

..3) start() 메서드를 호출하여 음악 파일을 재생합니다.

※ 음악 파일 재생하기 예시