Чего я пытаюсь добиться, так это удалить файл на SD-карте, я попробовал метод file.delete, который не сработал, потому что SD-карты читаются только сейчас.
Итак, я прочиталпост о SAF (Storage Access Framework), чтобы получить доступ для записи SD-карты путем хранения дерева Uri, которое мы получаем в onActivityResult.
Удаление файла работает нормально, но когда я начинаю намерение Intent.ACTION_OPEN_DOCUMENT_TREE иногда он возвращает последнюю папку, которая пуста, и способ показать файлы на SD-карте состоит в том, чтобы щелкнуть значок переполнения и затем выбрать показать SDCARD или Внутреннее хранилище, что может запутать некоторых людей, когда они запускают мое приложение.
я попытался добавить их к своему намерению: intent.putExtra ("android.content.extra.SHOW_ADVANCED", true); intent.putExtra ("android.content.extra.FANCY", true); intent.putExtra ("android.content.extra.SHOW_FILESIZE", true);
, который работает на некоторых устройствах, но это частный API, а на некоторых - нет.не работает.
Так есть ли способ, как автоматически открывать определенный каталог или показывать подсказку с шагами, объясняющими, какой каталог им выбрать?
private void getSDCardAccess(){
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath());
startActivityForResult(intent, REQUEST_EXTERNAL_ACCESS);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_EXTERNAL_ACCESS && resultCode == RESULT_OK) {
Uri treeUri = null;
if (data != null){
treeUri = data.getData();
}
if (treeUri != null && getActivity() != null) {
getActivity().getContentResolver().takePersistableUriPermission(treeUri,
Intent.FLAG_GRANT_READ_URI_PERMISSION |
Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
StorageUtil storageUtil = new StorageUtil(getActivity());
//Takes the access so that we can use it again after the app reopens
storageUtil.storeTreeUri(treeUri.toString());
Log.d(TAG, "treeUri: " + treeUri.toString());
}else{
Log.d(TAG,"uri is empty!");
}
}
}