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 ();
File video_file = new File(uri.getPath());
Что такое ури? Начните этот фрагмент кода с определения этого uri. Также укажите значение uri.toString (). Кроме того, вы не проверяете возвращаемое значение mkdir () и не действуете соответствующим образом. Кроме того, вам не нужно вызывать createNewFile (), но если вы это сделаете, разве не будет возвращаемого значения? А если нет ... не стоит ли проверять, создан ли он? - person blackapps   schedule 01.02.2021And app crashes at destination
Перехватите это исключение, и ваше приложение не выйдет из строя. - person blackapps   schedule 01.02.2021