У меня есть приложение, которое может открывать и редактировать двоичный файл с внешней SD-карты.Я хочу иметь возможность сохранить этот файл обратно из того места, где он был открыт.
Я добавил разрешения в файл манифеста, и я также спрашиваю у пользователя разрешения.Благодаря этим разрешениям я могу открыть файл и получить данные, но когда я хочу сохранить файл на внешнюю SD-карту, возникает ошибка: java.io.FileNotFoundException: /storage/3834-3433/file.bin: open failed: EACCES (Permission denied)
.
Вот код для предоставления разрешения:
public boolean isStoragePermissionGranted() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
return true;
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
return false;
}
}
else {
return true;
}
}
Вот код для выбора и получения пути к файлу:
button.setOnClickListener(v -> {
intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
startActivityForResult(intent, 200);
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case 200:
if (resultCode == RESULT_OK) {
String filePath = Objects.requireNonNull(data.getData()).getPath();
filePathMain = filePath;
}
break;
}
}
И это часть кода для сохранения файла:
void byteArrayToFile() {
try (OutputStream out = new FileOutputStream(filePathMain)) {
out.write(outBytes);
} catch (IOException e) {
e.printStackTrace();
}
}
Я понятия не имею, почему этопозволяет мне открывать файл, но не писать, когда у меня есть <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
.Мне также пришлось запустить это приложение на реальном устройстве, потому что, когда я запускаю его на эмуляторе, возникает ошибка, что он не может найти файл, который я выбрал.Я мог бы действительно использовать некоторую помощь в этом.Спасибо.