在Android平台上,录制视频是一项常见的功能,特别是在开发多媒体应用程序时。Android系统提供了API来支持这一功能,但在不同的Android版本之间可能存在兼容性问题。本话题主要关注如何在Android 7.0(Nougat)上正确地实现视频录制,并解决可能遇到的闪退问题。 我们来探讨如何启动系统的摄像头应用进行视频录制。这通常通过创建一个`Intent`对象并设置其类型为`ACTION_VIDEO_CAPTURE`来完成。以下是一个简单的示例: ```java Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); ``` 接下来,为了指定保存视频的位置,我们需要使用`putExtra()`方法传递一个`Uri`对象。在Android 6.0(Marshmallow)及更高版本,由于运行时权限的引入,我们需要先请求写入外部存储的权限。对于Android 7.0,我们需要特别处理文件 Uri 的安全问题,因为它引入了FileProvider来代替直接使用文件路径。以下是创建FileProvider的配置和获取Uri的步骤: 1. 在`AndroidManifest.xml`中添加`<provider>`标签,指定`android:name="androidx.core.content.FileProvider"`,并设置`android:authorities`为你应用的包名加上`.fileprovider`。 2. 创建一个名为`res/xml/file_paths.xml`的资源文件,定义要共享的文件路径: ```xml <paths> <external-path name="videos" path="Videos"/> </paths> ``` 3. 使用`FileProvider`创建Uri: ```java File videoFile = new File(getExternalFilesDir(Environment.DIRECTORY_MOVIES), "video.mp4"); Uri outputUri = FileProvider.getUriForFile(this, getPackageName() + ".fileprovider", videoFile); intent.putExtra(MediaStore.EXTRA_OUTPUT, outputUri); ``` 现在,我们已经设置了录制视频所需的参数,可以启动相机应用: ```java startActivityForResult(intent, REQUEST_CODE_CAPTURE_VIDEO); ``` 处理返回结果时,需要重写`onActivityResult()`方法,检查返回状态并访问录制的视频: ```java @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE_CAPTURE_VIDEO && resultCode == RESULT_OK) { // 视频录制成功,可以在这里处理视频文件 Uri capturedVideoUri = data.getData(); // 或者如果使用了EXTRA_OUTPUT: // Uri capturedVideoUri = outputUri; // ... } } ``` 为了生成视频的缩略图,可以使用`MediaMetadataRetriever`类。以下是一个创建缩略图的示例: ```java MediaMetadataRetriever retriever = new MediaMetadataRetriever(); retriever.setDataSource(capturedVideoUri.toString()); byte[] thumbnailData = retriever.getFrameAtTime(0, MediaMetadataRetriever.OPTION_CLOSEST); Bitmap thumbnail = BitmapFactory.decodeByteArray(thumbnailData, 0, thumbnailData.length); // 显示或保存缩略图 ``` 关于适配Android 7.0的Intent管理,主要是处理返回的`Uri`。在Android 7.0及以上版本,第三方应用不能直接访问通过`ACTION_VIDEO_CAPTURE`得到的Uri,因为它们可能指向外部存储。在这种情况下,你需要使用`ContentResolver`和`takePersistableUriPermission()`方法,以持久化的方式获取Uri的权限。然后,其他组件可以使用这个持久化的Uri来访问视频文件。 Android系统录制视频涉及到启动相机应用、处理返回结果、保存视频文件、生成缩略图以及适配不同Android版本的权限管理。通过正确理解和使用上述技术,开发者可以构建出稳定且兼容性强的视频录制功能。
- 1
- 普通网友2020-10-09实用性不高,然后怎么结束录制我没看明白
- shijunxing10673008932019-05-27真的可以用
- i冇心2021-02-04垃圾,标题党
- 粉丝: 19
- 资源: 9
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助