Scoped Storage 文件下载速度极慢

问题描述

我将我的应用程序定位为 android 11,在使用 MediaStore 处理文件的糟糕方式时遇到了很多问题!

    InputStream inputStream = connection.getInputStream();
    BufferedInputStream bis = new BufferedInputStream(inputStream);
    ContentValues values = new ContentValues();
    values.put(MediaStore.MediaColumns.disPLAY_NAME,fileName);
    values.put(MediaStore.MediaColumns.MIME_TYPE,mediaType+"/"+fileExt.replace(".",""));
    
    
    final ContentResolver resolver = context.getContentResolver();
    Uri uri = null;
    final Uri contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
    
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        ContentValues contentValues = new ContentValues();
        String fname = pref.getgalleryName()+File.separator +fileName;
        
        contentValues.put(MediaStore.MediaColumns.disPLAY_NAME,fileName);
        if(fileExt.equals(".mp4"))
        contentValues.put(MediaStore.MediaColumns.MIME_TYPE,"video/mp4");
        else if(fileExt.equals(".mp3"))
        contentValues.put(MediaStore.MediaColumns.MIME_TYPE,"audio/mp3");
        else contentValues.put(MediaStore.MediaColumns.MIME_TYPE,"audio/*");
        
        contentValues.put(
        MediaStore.Audio.Media.RELATIVE_PATH,Environment.DIRECTORY_DOWNLOADS );
        String[] projection = {MediaStore.MediaColumns._ID,MediaStore.MediaColumns.disPLAY_NAME,MediaStore.MediaColumns.RELATIVE_PATH,MediaStore.MediaColumns.DATE_MODIFIED
        };
        
        
        uri = resolver.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI,contentValues);
        contentValues.put(MediaStore.Audio.Media.IS_PENDING,0);
        
        
    }

通过下面的代码下载文件的时候发现下载很慢,用这种方法不可行

    if (uri != null) {
    OutputStream outputStream = context.getContentResolver().openOutputStream(uri);
    int lenghtOfFile = connection.getContentLength();
    if (outputStream != null) {
        bufferedoutputstream bos = new bufferedoutputstream(outputStream);
        byte[] buffer = new byte[]{(byte) (1024 >>> 8),(byte) 1024};
        int bytes = bis.read(buffer);
        long total = 0;
        int len1 = 0;
        while ((len1 = bis.read(buffer)) > 0) {
            total += len1; 
            publishProgress("" + (int)((total*100)/lenghtOfFile));
            bos.write(buffer,len1);
        }
        bos.close();
    }
}
bis.close();

是否可以更快地下载?我只需要下载 2 个媒体文件,分别是 .mp3 和 .mp4

使用 android 11 即使是媒体文件,有没有其他方法可以通过其他方式下载此文件

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)