如何在 android 11 中创建自定义文件夹App 文件夹

问题描述

  Im facing a problem when creating app custom folder. like 

com.app 和 storage/.hideFolder 等

通过使用低于 android 11 (SDK API 30) 设备的一些方法

它工作正常,但在 android 11 中。无法使用如下所示的方法实现它

 public static String root= Environment.getExternalStorageDirectory().toString();
 public static final String app_hided_folder ="/.HidedAPPTop/";
 public static final String app_showing_folder ="/APPTop/";
 public static final String draft_app_folder= app_hided_folder +"Draft/";


  public static void make_directry(String path,Context context) {
    File dir = new File(path);

    if (!dir.exists())
        Toast.makeText(context,(dir.mkdirs() ? "Directory has been created" : "Directory not created"),Toast.LENGTH_SHORT).show();
    else
        Toast.makeText(context,"Directory exists",Toast.LENGTH_SHORT).show();
}

函数调用

make_directry(Variables.app_hided_folder,getContext());

清单

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

 <application
     …
        android:requestLegacyExternalStorage="true"
     …
       >

第二个问题

公共静态字符串根= Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS ).toString();

uri 是我从选择器的响应中得到的视频路径。

File video_file = new File(uri.getPath());
            Log.d(Variables.tag + " new path",video_file.getAbsolutePath());
            Functions.copyFile(video_file,new File(Variables.gallery_resize_video));

copyFile 的函数调用

public static void copyFile(File sourceFile,File destFile) throws IOException {


        if (!destFile.getParentFile().exists())
            destFile.getParentFile().mkdirs();

        if (!destFile.exists()) {
            destFile.createNewFile();
        }

        FileChannel source = null;
        FileChannel destination = null;

        try {
            source = new FileInputStream(sourceFile).getChannel();
            destination = new FileOutputStream(destFile).getChannel();
            destination.transferFrom(source,source.size());
        } finally {
            if (source != null) {
                source.close();
            }
            if (destination != null) {
                destination.close();
            }
        }
    }

错误:新路径: /storage/emulated/0/Download/STOP/MP4_20210128_225711.mp4 系统错误: java.io.FileNotFoundException: /storage/emulated/0/Download/.HidedTop/gallery_resize_video.mp4: 打开失败:EACCES(权限被拒绝)

应用程序在目的地崩溃 =

new FileOutputStream(destFile).getChannel();

解决方法

通过使用下面的代码片段,我的问题就解决了。

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)

.getExternalStoragePublicDirectory() 已弃用。