android Storage Access Framework записывает файл при проблеме с SD-картой - PullRequest
0 голосов
/ 12 апреля 2020

Большое спасибо за чтение этого вопроса.

В настоящее время я собираюсь завершить 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());
    }
}

Еще раз, большое спасибо за чтение и надеюсь, что я получить ответ когда-нибудь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...