相机意图

要执行基本的相机操作(例如使用设备的默认相机应用程序捕获照片或视频),您不需要与 相机库 集成。相反,请使用 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 库。