У меня такой код:
private int REQUEST_CODE_PERMISSIONS = 1001;
private final String[] REQUIRED_PERMISSIONS = new String[]{"android.permission.CAMERA", "android.permission.WRITE_EXTERNAL_STORAGE"};
public String getBatchDirectoryName() {
String app_folder_path = "";
if (allPermissionsGranted()){
Log.e("i enter this code","!");
app_folder_path = Environment.getExternalStorageDirectory().toString() + "/images";
File dir = new File(app_folder_path);
if (!dir.exists() && !dir.mkdirs()) { //both are false but why?
Log.e("failed to create:",app_folder_path); ///returns: storage/emulated/0/images
}
}else{
app_folder_path = "fail"; // i DONT enter this code t
}
return app_folder_path;
}
private boolean allPermissionsGranted(){
for(String permission : REQUIRED_PERMISSIONS){
if (ContextCompat.checkSelfPermission(getContext(), permission) != PackageManager.PERMISSION_GRANTED){
return false;
}
}
return true;
}
Я пытаюсь сохранить изображение, поэтому использую функцию getBatchDirectoryName() для создания каталога, если он не существует, или для возврата существующего каталога.
Проблема в том, что каталог не существует, я не могу его создать по какой-то причине. Обе функции exists и mkdirs возвращают false.
В чем может быть причина? Я проверяю перед тем, есть ли у меня разрешение на запись файлов.
app_folder_path = Environment.getExternalStorageDirectory().toString() + "/images"; `Перейдите на app_folder_path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString() + "/images";, и он будет работать на Android 11. Для Android вы можете использовать свой старый код, если вы запрашиваете устаревшее внешнее хранилище в манифесте.
Я не думаю, что тег makefile означает то, что вы думаете :). Его следует убрать из этого вопроса ИМО.
@CommonsWare спасибо за информацию. Я попробую, когда вернусь домой, если это сработает, и дам знать
@blackapps спасибо за информацию. Я попробую, когда вернусь домой, если это сработает, и дам знать




Этот код не будет работать на Android 11+, как только ваш
targetSdkVersionповысится до30. Вы больше не можете создавать каталоги в произвольных местах. Пожалуйста, рассмотрите возможность использования Storage Access Framework и разрешите пользователю выбирать, где на устройстве пользователя (или в облачном хранилище пользователя) ваше приложение должно размещать контент пользователя.