我的问题是为什么我在尝试从 sdcard 中删除文件时需要此权限,因为权限显示为“写入”,当我尝试删除某些内容时它不会向 sdcard 写入任何内容,那么为什么需要这个权限?
我尝试删除权限,但没有它没有任何效果。
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();
}
删除文件方法
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");
}
}
}
}
}
这是我在这里的另一篇文章中使用的代码