이 과정에서는 기존 카메라 애플리케이션을 사용하여 동영상을 캡처하는 방법에 관해 설명합니다.
애플리케이션에서 실행되는 작업 중에서 동영상 통합이 차지하는 비중은 매우 적습니다. 캠코더를 새로 만들지 않고 간단하게 동영상을 촬영할 수 있습니다. 다행히 대부분의 Android 지원 기기에는 이미 동영상을 녹화하는 카메라 애플리케이션이 있습니다. 이 과정에서는 카메라 애플리케이션을 사용하여 동영상을 녹화하는 방법을 알아봅니다.
다음 관련 리소스를 참조하세요.
카메라 기능 요청
애플리케이션이 카메라를 필요로 하는지 알리려면 다음과 같이 manifest 파일에 <uses-feature>
태그를 삽입합니다.
<manifest ... > <uses-feature android:name="android.hardware.camera" android:required="true" /> ... </manifest>
애플리케이션에서 카메라를 사용하기는 하지만 작동하는 데 필요한 것이 아니라면 android:required
를 false
로 설정합니다. 그렇게 하면 Google Play에서 카메라가 없는 기기도 애플리케이션을 다운로드할 수 있습니다. 그런 다음 앱은 런타임 시 hasSystemFeature(PackageManager.FEATURE_CAMERA)
를 호출하여 카메라의 사용 가능 여부를 확인해야 합니다.
카메라를 사용할 수 없는 경우 카메라 기능을 중지합니다.
카메라 앱으로 동영상 녹화
Android에서 다른 애플리케이션에 작업을 위임하는 방법은 해야 할 일을 설명한 Intent
를 호출하는 것입니다. 이 절차는 세 부분을 포함하는데 이는 Intent
자체, 외부 Activity
를 시작하는 호출 및 포커스가 활동에 반환될 때 동영상을 처리하는 코드 일부입니다.
다음은 동영상을 캡처하는 인텐트를 호출하는 함수입니다.
Kotlin
const val REQUEST_VIDEO_CAPTURE = 1 private fun dispatchTakeVideoIntent() { Intent(MediaStore.ACTION_VIDEO_CAPTURE).also { takeVideoIntent -> takeVideoIntent.resolveActivity(packageManager)?.also { startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE) } } }
자바
static final int REQUEST_VIDEO_CAPTURE = 1; private void dispatchTakeVideoIntent() { Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); if (takeVideoIntent.resolveActivity(getPackageManager()) != null) { startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE); } }
startActivityForResult()
메서드는 resolveActivity()
를 호출하는 조건에 의해 보호되며 이 함수는 인텐트를 처리할 수 있는 첫 번째 활동 구성요소를 반환합니다. 이 확인 절차가 중요한 이유는 앱이 처리할 수 없는 인텐트를 사용하여 startActivityForResult()
를 호출하면 앱이 비정상 종료되기 때문입니다. 따라서 결과가 null이 아닌 한 안심하고 인텐트를 사용할 수 있습니다.
동영상 보기
Android 카메라 애플리케이션은 onActivityResult()
에 전달된 Intent
에 저장소의 동영상 위치를 가리키는 Uri
로 동영상을 반환합니다. 다음 코드는 이 동영상을 가져와서 VideoView
에 표시하는 방법을 보여줍니다.
Kotlin
override fun onActivityResult(requestCode: Int, resultCode: Int, intent: Intent) { if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK) { val videoUri: Uri = intent.data videoView.setVideoURI(videoUri) } }
자바
@Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK) { Uri videoUri = intent.getData(); videoView.setVideoURI(videoUri); } }