Большое спасибо за чтение этого вопроса.
В настоящее время я собираюсь завершить sh мой проект.
Однако у меня большие проблемы.
Хотя мне удалось получить разрешение на запись на SD-карту в моем приложении,
Я даже не могу найти в Google или понять, как правильно использовать это разрешение.
Кто-нибудь знает, как записать файл на SD-карта через SAF-> channelSftp.get ()?
Поэтому я могу правильно писать на внешнее хранилище, но не на SD-карту.
Вот мой код, который я использовал для получения доступа на SD-карту.
Надеюсь, что кто-нибудь может помочь мне с решением.
Этот код используется для получения доступа к SD-карте:
public void takeCardUriPermission(String sdCardRootPath) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
File sdCard = new File(sdCardRootPath);
StorageManager storageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE);
StorageVolume storageVolume = storageManager.getStorageVolume(sdCard);
Intent intent = storageVolume.createAccessIntent(null);
try {
startActivityForResult(intent, 4010);
} catch (ActivityNotFoundException e) {
e.printStackTrace();
}
}
}
Этот код используется чтобы сохранить разрешение постоянным:
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 4010) {
Uri uri = data.getData();
grantUriPermission(getPackageName(), uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION |
Intent.FLAG_GRANT_READ_URI_PERMISSION);
final int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_WRITE_URI_PERMISSION |
Intent.FLAG_GRANT_READ_URI_PERMISSION);
getContentResolver().takePersistableUriPermission(uri, takeFlags);
}
}
И вот как я реализовал разрешение и что происходит, возникает ошибка «Отказано в разрешении»
void write(String src, Uri uri){
try {
ParcelFileDescriptor descriptor=context.getContentResolver().openFileDescriptor(uri,"w");
if(descriptor!=null) {
FileOutputStream fos=new FileOutputStream(descriptor.getFileDescriptor());
channelSftp.get(src,fos);
fos.close();
}
} catch (IOException | SftpException e) {
Log.e("Error", "again "+e.getMessage());
}
}
Еще раз, большое спасибо за чтение и надеюсь, что я получить ответ когда-нибудь.