Как я могу создать пользовательскую папку (папку приложения) в Android 11

  Im facing a problem when creating app custom folder. like 

com.app и хранилище / .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"
     …
       >

2-й вопрос

общедоступная статическая строка root = 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, 0, source.size());
        } finally {
            if (source != null) {
                source.close();
            }
            if (destination != null) {
                destination.close();
            }
        }
    }

ОШИБКА: новый путь: /storage/emulated/0/Download/STop/MP4_20210128_225711.mp4 System.err: java.io.FileNotFoundException: /storage/emulated/0/Download/.HidedTop/gallery_resize_video.mp4: ошибка открытия: EACCES ( Доступ запрещен)

И приложение вылетает в пункте назначения =

новый FileOutputStream (destFile) .getChannel ();


person Tanveerbyn    schedule 28.01.2021    source источник
comment
Вы можете создать их, например, в папке «Документы».   -  person blackapps    schedule 28.01.2021
comment
@blackapps Я не могу вас понять, сэр ..   -  person Tanveerbyn    schedule 28.01.2021
comment
вы имеете в виду, что мне нужно сделать свой собственный каталог в папке "Документы" или "Загрузки"?   -  person Tanveerbyn    schedule 28.01.2021
comment
Не так ... я запутался в папке com.APPtop и т. Д., Как мы делали раньше в Android 10 ниже   -  person Tanveerbyn    schedule 28.01.2021
comment
Что такое папка com.APPtop?   -  person blackapps    schedule 28.01.2021
comment
Давайте продолжим это обсуждение в чате.   -  person Tanveerbyn    schedule 28.01.2021
comment
папка с именем пакета, которая находится в android / data / appname   -  person Tanveerbyn    schedule 28.01.2021
comment
Не можете указать полный существующий путь? Далее: какое отношение этот путь имеет к Environment.getExternalStorageDirectory () или к вашей проблеме?   -  person blackapps    schedule 28.01.2021
comment
Спасибо за вашу поддержку. Я нашел решение.   -  person Tanveerbyn    schedule 28.01.2021
comment
Нашел? Думаю, я дал вам решение. ;-)   -  person blackapps    schedule 28.01.2021
comment
File video_file = new File(uri.getPath()); Что такое ури? Начните этот фрагмент кода с определения этого uri. Также укажите значение uri.toString (). Кроме того, вы не проверяете возвращаемое значение mkdir () и не действуете соответствующим образом. Кроме того, вам не нужно вызывать createNewFile (), но если вы это сделаете, разве не будет возвращаемого значения? А если нет ... не стоит ли проверять, создан ли он?   -  person blackapps    schedule 01.02.2021
comment
And app crashes at destination Перехватите это исключение, и ваше приложение не выйдет из строя.   -  person blackapps    schedule 01.02.2021
comment
uri - это путь к видео, который я получил в ответ от средства выбора галереи. и все же вы можете уточнить это, пожалуйста ...   -  person Tanveerbyn    schedule 01.02.2021
comment
Вы не указали стоимость, которую я просил. Почему нет? Сейчас на это уходит все больше и больше времени. И я хочу, чтобы вы адаптировали свой код, прежде чем мы продолжим.   -  person blackapps    schedule 01.02.2021
comment
/ storage / emulated / 0 / Скачать /. HidedFolder / myvideo1.mp4 - значение uri   -  person Tanveerbyn    schedule 01.02.2021
comment
Никакой сборщик галереи не предоставит uri, для которого uri.toString () даст значение, которое вы только что сказали. Пожалуйста, дополните. Также укажите значение uri.getPath (), поскольку это то, что вы используете в своем коде.   -  person blackapps    schedule 01.02.2021
comment
его заказ, сделанный мной, можете ли вы быть в курсе, потому что теперь я все больше запутываюсь, главное, почему я получил эту ошибку EACCES (Permission denied), и я не могу предоставить вам полный фрагмент кода, потому что он вложен и определен в тысячах классов ..   -  person Tanveerbyn    schedule 01.02.2021
comment
По крайней мере, вы можете определить этот uri в своем коде с помощью Uri uri = Uri.parse (.....); И если бы вы были точны, вы бы опубликовали только код для создания файла. Не функция копирования, когда вам нужен другой файл. Будь проще.   -  person blackapps    schedule 01.02.2021
comment
Как я уже говорил ранее, это происходит во многих случаях, когда и эта функция также используется многими классами, и я получаю одну и ту же ошибку от каждой отдельной функции.   -  person Tanveerbyn    schedule 01.02.2021
comment
Прочтите это: stackoverflow.com/a/66366102/9917404   -  person Thoriya Prahalad    schedule 25.02.2021


Ответы (1)


Используя приведенный ниже фрагмент, моя проблема решена.

Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_DCIM)

.getExternalStoragePublicDirectory() устарел.

person Tanveerbyn    schedule 28.01.2021
comment
Да, это то, что я сказал вам использовать. Ваша собственная папка в существующем общедоступном каталоге. - person blackapps; 28.01.2021
comment
@blackapps нужна твоя помощь! папка создана успешно, но она не работает, например, мне нужно редактировать и обновлять, копировать в ней, но каждый раз, когда он говорит java.io.IOException: Operation not allowed - person Tanveerbyn; 01.02.2021
comment
GPUCameraRecorder: java.io.FileNotFoundException: /storage/emulated/0/Download/.HidedFolder error @blackapps по-прежнему у приложений нет прав на управление им - person Tanveerbyn; 01.02.2021
comment
@blackapps теперь проверьте со второго вопроса - person Tanveerbyn; 01.02.2021