当前位置: 首页 > news >正文

Android提供了多种方式来打开特定文件夹中的视频

使用 MediaStore获取指定文件夹的视频,更优化方法:


import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.annotation.RequiresApi;
import android.webkit.MimeTypeMap;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;public class VideoUtils {public static final String VIDEO_DIR = "videoData";public static Uri saveVideoToExternalStorage(Context context, File videoFile) throws IOException {if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {// 分区存储模式下需要使用MediaStore APIreturn insertVideoWithMediaStore(context, videoFile);} else {// 旧存储模型可以直接写入文件return writeVideoToExternalFilesDir(context, videoFile);}}@RequiresApi(api = Build.VERSION_CODES.O)private static Uri insertVideoWithMediaStore(Context context, File videoFile) {// 获取文件的MIME类型String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(videoFile.getName().substring(videoFile.getName().lastIndexOf('.')));ContentValues values = new ContentValues();values.put(MediaStore.Video.Media.DISPLAY_NAME, videoFile.getName());values.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4");values.put(MediaStore.Video.Media.RELATIVE_PATH, Environment.DIRECTORY_MOVIES + "/" + VIDEO_DIR);ContentResolver resolver = context.getContentResolver();Uri uri = resolver.insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);if (uri != null) {try (OutputStream outputStream = context.getContentResolver().openOutputStream(uri)) {Files.copy(videoFile.toPath(), outputStream);} catch (IOException e) {e.printStackTrace();}}return uri;}public static Uri saveVideoToExternalStorage2(Context context, File videoFile) throws IOException {if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {// 分区存储模式下需要使用MediaStore APIreturn insertVideoWithMediaStore(context, videoFile);} else {// 旧存储模型可以直接写入文件return writeVideoToExternalFilesDir(context, videoFile);}}/*** 将视频文件保存到应用的专属外部存储目录。** @param context   应用的 Context* @param videoFile 要保存的视频文件* @return 保存视频文件的 Uri* @throws IOException 如果文件写入过程中发生错误*/public static Uri writeVideoToExternalFilesDir(Context context, File videoFile) throws IOException {// Get the external files directory for the appFile externalFilesDir = context.getExternalFilesDir(null);if (externalFilesDir != null) {// Create a unique name for the video file in the external directoryFile outputFile = new File(externalFilesDir, getFileName(videoFile.getAbsolutePath())); // Use a meaningful file name// Ensure the parent directory existsoutputFile.getParentFile().mkdirs();// Open a buffered input stream from the source file and a buffered output stream to the destination filetry (FileInputStream inputStream = new FileInputStream(videoFile);BufferedInputStream bufferedInput = new BufferedInputStream(inputStream);FileOutputStream outputStream = new FileOutputStream(outputFile);BufferedOutputStream bufferedOutput = new BufferedOutputStream(outputStream)) {byte[] buffer = new byte[4096];int bytesRead;while ((bytesRead = bufferedInput.read(buffer)) != -1) {bufferedOutput.write(buffer, 0, bytesRead);}}return Uri.fromFile(outputFile);}return null;}}

http://www.lryc.cn/news/309153.html

相关文章:

  • 基于django的购物商城系统
  • Swagger3 使用详解
  • JVM 第二部分-2(堆,方法区)
  • 蓝桥杯Java B组历年真题(2013年-2019年)
  • 你是谁,便会遇见谁
  • Linux/Centos 部署静态IP,解决无法访问目标主机、Destination Host Unreachable、无法ping通互联网的问题
  • 在学习云原生的时候,一直会报错ImagePullBackOff Back-off pulling image
  • Android Activity跳转详解
  • 计算机网络(2)-----数据链路层
  • 贪心算法(算法竞赛、蓝桥杯)--修理牛棚
  • 【AIGC】微笑的秘密花园:红玫瑰与少女的美好相遇
  • vue3 中 主题定制
  • 数据分析之Logistic回归分析(二元逻辑回归、多元有序逻辑回归、多元无序逻辑回归)
  • 【c++】通讯录管理系统
  • Tomcat 架构
  • Spring 整合mybatis
  • centos7升级openssl_3
  • nvidia a100-pcie-40gb环境安装
  • 嵌入式 Linux 下的 LVGL 移植
  • js同步和异步请求
  • 【Leetcode】2369. 检查数组是否存在有效划分
  • Laravel Octane 和 Swoole 协程的使用分析
  • 腾讯云又双叕降价,云服务器配置优惠价格表2024新版报价
  • 【react native】css踩坑记录
  • ChatGPT学习第四周
  • 2D割草/吸血鬼游戏 性能优化——GPU Spine动画
  • VSCode上搭建C/C++开发环境(vscode配置c/c++环境)Windows系统---保姆级教程
  • [渗透教程]-013-嗅探工具-wireshark操作
  • NLP Seq2Seq模型
  • 如何在 Linux 上使用 dmesg 命令