Я пытаюсь создать папку во внешнем хранилище Android. Я пробую много примеров, но все не работает. Я установил разрешения времени выполнения для чтения и записи во внешнее хранилище. Он работает с Android API 6, 7., но не работает с Android Oreo.
File f = new File(Environment.getExternalStorageDirectory(), "MyDir");
if (!f.exists()) {
try {
boolean is_seccess = f.mkdirs();
if (is_seccess) {
Toast.makeText(this, "create", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "not create", Toast.LENGTH_SHORT).show();
}
}catch (Exception e){
e.printStackTrace();
}
}
Я проверил, доступно ли внешнее хранилище для чтения и записи, оно вернуло true.
public boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
}
return false;
}
Я даю разрешения ниже, я также даю разрешение на выполнение и разрешаю это.
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Просто Android Oreo не работает, другое устройство работает идеально. В чем проблема в моем коде?
1 ответ
Приложение запрашивает READ_EXTERNAL_STORAGE, и пользователь его предоставляет. Если приложение нацелено на уровень API 25 или ниже, система одновременно предоставляет WRITE_EXTERNAL_STORAGE, поскольку оно принадлежит к той же группе разрешений STORAGE и также зарегистрировано в манифесте. Если приложение нацелено на Android 8.0 (уровень API 26), система в это время предоставляет только READ_EXTERNAL_STORAGE; однако, если приложение позже запросит WRITE_EXTERNAL_STORAGE
Спросите разрешение во время выполнения, как показано ниже:
private boolean checkAndRequestPermissions() {
int permissionReadStorage = ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_EXTERNAL_STORAGE);
int permissionCamera = ContextCompat.checkSelfPermission(this,
Manifest.permission.CAMERA);
int permissionWriteStorage = ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
List<String> listPermissionsNeeded = new ArrayList<>();
if (permissionCamera != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.CAMERA);
}
if (permissionReadStorage != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.READ_EXTERNAL_STORAGE);
}
if (permissionWriteStorage != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
if (!listPermissionsNeeded.isEmpty()) {
ActivityCompat.requestPermissions((Activity) this,
listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]),
REQUEST_ID_MULTIPLE_PERMISSIONS);
return false;
}
return true;
}
Похожие вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].