相机 intent
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
如果您要使用设备的默认相机应用执行拍照或录制视频等基本相机操作,则无需与相机库集成,请改用 Intent
。
使用相机应用拍照
Android 通过调用 Intent
将操作委托给其他应用。此过程涉及三个部分:Intent
本身,用于启动外部 Activity
的调用,以及用于在焦点返回到您的 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
的第一个 activity 组件)的条件保护。执行此检查,确保您调用的 Intent
不会造成应用崩溃。
其他资源
对于基本相机操作,请使用 Intent
。否则,建议您使用 Camera2 和 CameraX 库来处理比拍照或录制视频等基本操作更复杂的操作。
本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-08-21。
[null,null,["最后更新时间 (UTC):2025-08-21。"],[],[],null,["# Camera intents\n\nTo perform basic camera actions like capturing a photo or video using the device's default camera application, you do not need to integrate with a [Camera library](/training/camera/choose-camera-library). Instead, use an [`Intent`](https://developer.android.com/reference/android/content/Intent).\n\nTake a photo with a camera app\n------------------------------\n\nAndroid delegates actions to other applications by invoking an `Intent`. This process involves three pieces: the `Intent` itself, a call to start the external `Activity`, and some code to handle the image data when focus returns to your activity.\n\nHere's a function that invokes an `Intent` to capture a photo. \n\n### Kotlin\n\n```kotlin\nval REQUEST_IMAGE_CAPTURE = 1\n \nprivate fun dispatchTakePictureIntent() {\n val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)\n try {\n startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE)\n } catch (e: ActivityNotFoundException) {\n // display error state to the user\n }\n}\n```\n\n### Java\n\n```java\nstatic final int REQUEST_IMAGE_CAPTURE = 1;\n \nprivate void dispatchTakePictureIntent() {\n Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);\n try {\n startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);\n } catch (ActivityNotFoundException e) {\n // display error state to the user\n }\n}\n```\n\nRecord a video with a camera app\n--------------------------------\n\nYou can also invoke an `Intent` to capture a video. \n\n### Kotlin\n\n```kotlin\nval REQUEST_VIDEO_CAPTURE = 1\n \nprivate fun dispatchTakeVideoIntent() {\n Intent(MediaStore.ACTION_VIDEO_CAPTURE).also { takeVideoIntent -\u003e\n takeVideoIntent.resolveActivity(packageManager)?.also {\n startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE)\n } ?: run {\n //display error state to the user\n }\n }\n}\n```\n\n### Java\n\n```java\nstatic final int REQUEST_VIDEO_CAPTURE = 1;\n \nprivate void dispatchTakeVideoIntent() {\n Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);\n if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {\n startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE);\n }\n else {\n //display error state to the user\n }\n}\n```\n\nThe `startActivityForResult()` method is protected by a condition that calls `resolveActivity()`, which returns the first activity component that can handle the `Intent`. Perform this check to ensure that you are invoking an `Intent` that won't crash your app.\n\nAdditional Resources\n--------------------\n\nFor basic camera actions, use an `Intent`. Otherwise, it is recommended to use the Camera2 and CameraX libraries for anything more complex than basic image or video capture.\n\n- [CameraX camera package](https://developer.android.com/training/camerax)\n- [Camera2 camera package](https://developer.android.com/training/camera2)\n- [Camera sample projects](https://github.com/android/camera-samples)"]]