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


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

    1. import android.content.ContentResolver;
    2. import android.content.ContentValues;
    3. import android.content.Context;
    4. import android.net.Uri;
    5. import android.os.Build;
    6. import android.os.Environment;
    7. import android.provider.MediaStore;
    8. import android.support.annotation.RequiresApi;
    9. import android.webkit.MimeTypeMap;
    10. import java.io.BufferedInputStream;
    11. import java.io.BufferedOutputStream;
    12. import java.io.File;
    13. import java.io.FileInputStream;
    14. import java.io.FileOutputStream;
    15. import java.io.IOException;
    16. import java.io.OutputStream;
    17. import java.nio.file.Files;
    18. public class VideoUtils {
    19. public static final String VIDEO_DIR = "videoData";
    20. public static Uri saveVideoToExternalStorage(Context context, File videoFile) throws IOException {
    21. if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
    22. // 分区存储模式下需要使用MediaStore API
    23. return insertVideoWithMediaStore(context, videoFile);
    24. } else {
    25. // 旧存储模型可以直接写入文件
    26. return writeVideoToExternalFilesDir(context, videoFile);
    27. }
    28. }
    29. @RequiresApi(api = Build.VERSION_CODES.O)
    30. private static Uri insertVideoWithMediaStore(Context context, File videoFile) {
    31. // 获取文件的MIME类型
    32. String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(videoFile.getName().substring(videoFile.getName().lastIndexOf('.')));
    33. ContentValues values = new ContentValues();
    34. values.put(MediaStore.Video.Media.DISPLAY_NAME, videoFile.getName());
    35. values.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4");
    36. values.put(MediaStore.Video.Media.RELATIVE_PATH, Environment.DIRECTORY_MOVIES + "/" + VIDEO_DIR);
    37. ContentResolver resolver = context.getContentResolver();
    38. Uri uri = resolver.insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);
    39. if (uri != null) {
    40. try (OutputStream outputStream = context.getContentResolver().openOutputStream(uri)) {
    41. Files.copy(videoFile.toPath(), outputStream);
    42. } catch (IOException e) {
    43. e.printStackTrace();
    44. }
    45. }
    46. return uri;
    47. }
    48. public static Uri saveVideoToExternalStorage2(Context context, File videoFile) throws IOException {
    49. if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
    50. // 分区存储模式下需要使用MediaStore API
    51. return insertVideoWithMediaStore(context, videoFile);
    52. } else {
    53. // 旧存储模型可以直接写入文件
    54. return writeVideoToExternalFilesDir(context, videoFile);
    55. }
    56. }
    57. /**
    58. * 将视频文件保存到应用的专属外部存储目录。
    59. *
    60. * @param context 应用的 Context
    61. * @param videoFile 要保存的视频文件
    62. * @return 保存视频文件的 Uri
    63. * @throws IOException 如果文件写入过程中发生错误
    64. */
    65. public static Uri writeVideoToExternalFilesDir(Context context, File videoFile) throws IOException {
    66. // Get the external files directory for the app
    67. File externalFilesDir = context.getExternalFilesDir(null);
    68. if (externalFilesDir != null) {
    69. // Create a unique name for the video file in the external directory
    70. File outputFile = new File(externalFilesDir, getFileName(videoFile.getAbsolutePath())); // Use a meaningful file name
    71. // Ensure the parent directory exists
    72. outputFile.getParentFile().mkdirs();
    73. // Open a buffered input stream from the source file and a buffered output stream to the destination file
    74. try (FileInputStream inputStream = new FileInputStream(videoFile);
    75. BufferedInputStream bufferedInput = new BufferedInputStream(inputStream);
    76. FileOutputStream outputStream = new FileOutputStream(outputFile);
    77. BufferedOutputStream bufferedOutput = new BufferedOutputStream(outputStream)) {
    78. byte[] buffer = new byte[4096];
    79. int bytesRead;
    80. while ((bytesRead = bufferedInput.read(buffer)) != -1) {
    81. bufferedOutput.write(buffer, 0, bytesRead);
    82. }
    83. }
    84. return Uri.fromFile(outputFile);
    85. }
    86. return null;
    87. }
    88. }

  • 相关阅读:
    mysql配置所有人可连接_mysql配置允许外界连接
    Redis系列10:HyperLogLog实现海量数据基数统计
    一文带你了解推荐系统常用模型及框架
    docker启动和关闭命令
    PDU是什么?
    猿创征文|在第一轮复习中,考研路上的成长历程
    C# 找出两个Rectangle或是矩形的相互重合与非重合部分?
    每日一题AC
    Ubuntu系统下配置安装区块链Hyperledger Fabric(新手小白篇)
    fastjson(1.2.24-rce)
  • 原文地址:https://blog.csdn.net/ck3345143/article/details/136385827