当前位置: 首页 > 知识库问答 >
问题:

如何在Android 11或Android Q中保存视频文件

包兴思
2023-03-14

我想保存Whatsapp的状态。通过使用此代码,我可以保存图像

public void saveImage(Bitmap bitmap, String name) {
    OutputStream fileOutputStream;
    Uri imageUri;
    try {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            ContentResolver contentResolver = context.getApplicationContext().getContentResolver();
            ContentValues contentValues = new ContentValues();

            contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, "" + name);
            contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpg");
            contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DCIM + "/V Troid/WhatsApp");
            imageUri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
            fileOutputStream = (FileOutputStream) contentResolver.openOutputStream(Objects.requireNonNull(imageUri));
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);
            Objects.requireNonNull(fileOutputStream);
            Toast.makeText(context.getApplicationContext(), "Image Saved", Toast.LENGTH_SHORT).show();

        }
    } catch (Exception e) {
        Toast.makeText(context.getApplicationContext(), "Error \n" + e, Toast.LENGTH_SHORT).show();
    }
}

但现在我想保存视频文件太,为此我使用这个代码,但它不为我工作的文件,我得到后,这个代码被破坏

public void saveVideo(String name, Uri vidUri) {
        OutputStream fileOutputStream;
        Uri VideoUri;
        try {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {

                ContentResolver contentResolver = context.getApplicationContext().getContentResolver();
                ContentValues contentValues = new ContentValues();
                contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, "" + name);
                contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "video/mp4");
                contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_MOVIES + "/V Troid/WhatsApp");
                VideoUri = contentResolver.insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, contentValues);
                fileOutputStream = (FileOutputStream) contentResolver.openOutputStream(Objects.requireNonNull(vidUri));
                Uri videoFileUri = contentResolver.insert(vidUri, contentValues);
                Objects.requireNonNull(fileOutputStream);
                Toast.makeText(context.getApplicationContext(), "Should Work", Toast.LENGTH_SHORT).show();

            }
        } catch (Exception e) {
            Toast.makeText(context.getApplicationContext(), "Error in saving\n" + e, Toast.LENGTH_SHORT).show();
        }
    }

我的目标是Android11

共有1个答案

王声
2023-03-14

试试这个,我把它用于我的WhatsApp状态保护程序:

 @RequiresApi(api = Build.VERSION_CODES.Q)
private void saveVideoQ(Uri uri3){

    Context context = MainActivity.this;
    String videoFileName = "video_" + System.currentTimeMillis() + ".mp4";

    ContentValues valuesvideos;
    valuesvideos = new ContentValues();
    valuesvideos.put(MediaStore.Video.Media.RELATIVE_PATH, "Movies/");
    valuesvideos.put(MediaStore.Video.Media.TITLE, videoFileName);
    valuesvideos.put(MediaStore.Video.Media.DISPLAY_NAME, videoFileName);
    valuesvideos.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4");
    valuesvideos.put(MediaStore.Video.Media.DATE_ADDED, System.currentTimeMillis() / 1000);
    valuesvideos.put(MediaStore.Video.Media.DATE_TAKEN, System.currentTimeMillis());
    valuesvideos.put(MediaStore.Video.Media.IS_PENDING, 1);
    ContentResolver resolver = context.getContentResolver();
    Uri collection = MediaStore.Video.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY); //all video files on primary external storage
    Uri uriSavedVideo = resolver.insert(collection, valuesvideos);

    ParcelFileDescriptor pfd;

    try {
        pfd = context.getContentResolver().openFileDescriptor(uriSavedVideo,"w");

        assert pfd != null;
        FileOutputStream out = new FileOutputStream(pfd.getFileDescriptor());

        // Get the already saved video as fileinputstream from here
        InputStream in = getContentResolver().openInputStream(uri3);


        byte[] buf = new byte[8192];

        int len;
        int progress = 0;
        while ((len = in.read(buf)) > 0) {
            progress = progress + len;

            out.write(buf, 0, len);
        }
        out.close();
        in.close();
        pfd.close();
        valuesvideos.clear();
        valuesvideos.put(MediaStore.Video.Media.IS_PENDING, 0);
        valuesvideos.put(MediaStore.Video.Media.IS_PENDING, 0); //only your app can see the files until pending is turned into 0

        context.getContentResolver().update(uriSavedVideo, valuesvideos, null, null);
        File file = new File(Environment.getExternalStorageDirectory() + File.separator + "/Movies/" + videoFileName);
        showNotification(this,file);
        showFullscreenAd();
    } catch (Exception e) {
        Toast.makeText(context, "error: " + e.getMessage(), Toast.LENGTH_SHORT).show();
        e.printStackTrace();
    }
}
 类似资料:
  • 本文向大家介绍python3将视频流保存为本地视频文件,包括了python3将视频流保存为本地视频文件的使用技巧和注意事项,需要的朋友参考一下 使用python3+opencv3.3.1环境将视频流保存为本地视频文件,具体内容如下 1、利用opencv中的VideoCapture类获取视频流的链接,通过cv2的方法得到该视频流的帧数和每帧大小。 2、使用VideoWriter类进行视频编码 3、通

  • 我正在尝试开发一个应用程序,允许我在录制视频时绘制视频,然后将录制的视频和视频保存在一个mp4文件中供以后使用。另外,我想使用camera2库,特别是我需要我的应用程序在高于API 21的设备上运行,我总是避免使用不推荐的库。 我尝试了很多方法,包括FFmpeg,其中我放置了TextureView的覆盖层。getBitmap()(来自摄影机)和从画布获取的位图。它工作正常,但由于它的功能很慢,视频

  • 我想保留一个文件,即使在卸载了我的应用程序在Android11。多亏了Android10和11关于存储的更新,我不能再这样做了。另外,我不想使用数据备份或远程服务器,它必须离线。有什么建议吗?

  • 本文向大家介绍python读取和保存视频文件,包括了python读取和保存视频文件的使用技巧和注意事项,需要的朋友参考一下 为了获取视频,应该创建一个 VideoCapture 对象。他的参数可以是设备的索引号,或者是一个视频文件。设备索引号就是在指定要使用的摄像头。 一般的笔记本电脑都有内置摄像头。所以参数就是 0。你可以通过设置成 1 或者其他的来选择别的摄像头。之后,你就可以一帧一帧的捕获视

  • 我想将用我的应用程序录制的mp3文件存储到带有MediaStore的音乐文件夹中,以便在Android 10的新“范围存储”中使用。 此方法效果很好,但这些文件使用时间戳命名(例如1576253519449),没有扩展名。 如果我用文件管理器手动添加扩展名,则文件将被正确记录。 如何使用来命名文件? 还有一个问题:只适用于Android 10。如何保持与旧版本的逆转兼容性? 编辑: 为了实现逆转兼

  • 本文向大家介绍opencv实现读取视频保存视频,包括了opencv实现读取视频保存视频的使用技巧和注意事项,需要的朋友参考一下 不得不说opencv是个强大的东东,以前做一个项目的一个模块时使用到进行图形处理,这次是想将一个视频的播放放慢,以前在网上看到opencv有这个功能,今天就不小心尝试了下,东西不多,主要是做个小记录还有一点要注意的小问题说一下,代码不多,基本上也都是copy的网上的 有几