У меня вопрос, почему мне нужно это разрешение, когда я пытаюсь удалить файл с SD-карты, так как в разрешениях написано «Запись», он ничего не записывает на SD-карту, когда я пытаюсь что-то удалить, так почему этотребуется?
Я пытался удалить разрешение, но без него ничего не работает.
WRITE_EXTERNAL_STORAGE - это опасное разрешение, которое мне нужно включить в мою политику конфиденциальности , и яне знаю, как это объяснить.
Мои разрешения
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Мой код для удаления файла
if (getActivity() != null) {
try {
treeUri = storageUtil.loadTreeUri();
if (!treeUri.equals("")) {
deleteFile(Uri.parse(treeUri), file);
Main.songs.deleteFile(getActivity(), songList.get(position).getData());
Main.songs.reScan(getActivity());
songList = Main.songs.getSongs();
//Send broadcast to update adapters
Intent intent = new Intent(Constants.ACTIONS.BROADCAST_UPDATE_ADAPTER2);
getActivity().sendBroadcast(intent);
if (!songList.isEmpty()) {
allSongsAdapter.updateList(songList);
}
} else if (treeUri.equals("")) {
((MainActivity) getActivity()).getSDCardAccess();
Toast.makeText(getActivity(), "First select directory with music files and try again.", Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
Toast.makeText(getActivity(), "Something went wrong!", Toast.LENGTH_SHORT).show();
}
dialog.dismiss();
}
метод deleteFile
private void deleteFile(Uri uri, File file){
if (getActivity() != null){
Intent intent = new Intent(Constants.ACTIONS.BROADCAST_UPDATE_PANEL_STATE);
LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);
}
if (file.delete()){
Log.i(TAG,"internal delete!");
return;
}
if (getActivity() != null && file.exists()) {
DocumentFile pickedDir = DocumentFile.fromTreeUri(getActivity(), uri);
String filename = file.getName();
try {
getActivity().getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
} catch (SecurityException e) {
Log.e(TAG, "SecurityException caught when deleting FilePath!", e);
}
Log.d(TAG, "fileName: " + filename);
if (pickedDir != null) {
DocumentFile documentFile = pickedDir.findFile(filename);
if (documentFile != null && documentFile.exists()) {
if (documentFile.delete()) {
Log.i(TAG, "Delete successful");
} else {
Log.i(TAG, "Delete unsuccessful");
}
}
}
}
}
Это код, который я использовал из другого поста здесь
Android SAF (Storage Access FrameWork): Получить конкретный файл Uri из TreeUri