本课程介绍了如何使用已有相机应用拍摄视频。
您的应用要发挥功能,而集成视频只是您应用功能的一小部分。您可以轻松拍摄视频,而无需重新构建摄像机。值得高兴的是,大多数搭载 Android 的设备已经安装了一个用于录制视频的相机应用。在本课程中,您将学习如何使用相机应用录制视频。
请参阅以下相关资源:
请求相机功能
如需声明您的应用依赖于相机,请在清单文件中添加 <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
的调用,以及用于在焦点返回到 Activity 时处理视频的一些代码。
下面是一个调用 Intent 以拍摄视频的函数。
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) } } }
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); } }
请注意,startActivityForResult()
方法受调用 resolveActivity()
(返回可处理 Intent 的第一个 Activity 组件)的条件保护。执行此检查非常重要,因为如果您使用任何应用都无法处理的 Intent 调用 startActivityForResult()
,您的应用就会崩溃。所以只要结果不是 Null,就可以放心使用 Intent。
观看视频
Android 相机应用会返回 Intent
(作为 Uri
传递给 onActivityResult()
,指向视频在存储设备中所处的位置)中的视频。下面的代码会检索此视频并将其显示在一个 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) } }
Java
@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); } }