要执行基本的相机操作(例如使用设备的默认相机应用程序捕获照片或视频),您不需要与 相机库 集成。相反,请使用 Intent
。
使用相机应用程序拍照
Android 通过调用 Intent
将操作委托给其他应用程序。此过程涉及三个部分:Intent
本身、启动外部 Activity
的调用以及在焦点返回到您的活动时处理图像数据的代码。
以下是一个调用 Intent
拍摄照片的函数。
Kotlin
val REQUEST_IMAGE_CAPTURE = 1 private fun dispatchTakePictureIntent() { val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) try { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE) } catch (e: ActivityNotFoundException) { // display error state to the user } }
Java
static final int REQUEST_IMAGE_CAPTURE = 1; private void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); try { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } catch (ActivityNotFoundException e) { // display error state to the user } }
使用相机应用程序录制视频
您也可以调用 Intent
来拍摄视频。
Kotlin
val REQUEST_VIDEO_CAPTURE = 1 private fun dispatchTakeVideoIntent() { Intent(MediaStore.ACTION_VIDEO_CAPTURE).also { takeVideoIntent -> takeVideoIntent.resolveActivity(packageManager)?.also { startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE) } ?: run { //display error state to the user } } }
Java
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); } else { //display error state to the user } }
startActivityForResult()
方法受一个条件保护,该条件调用 resolveActivity()
,后者返回可以处理 Intent
的第一个活动组件。执行此检查以确保您调用的 Intent
不会使您的应用程序崩溃。
其他资源
对于基本的相机操作,请使用 Intent
。否则,建议对任何比基本图像或视频捕获更复杂的操作使用 Camera2 和 CameraX 库。