我的问题是,为什么我要从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();
}
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): Get particular file Uri from TreeUri
答案 0 :(得分:1)
有两种类型的权限。 1.阅读内容(只读访问权限) 2.修改内容(读写访问权限)
写入访问/权限与修改光盘上的内容有关。
答案 1 :(得分:0)
删除文件与在Unix中通过命令行发布rm
的概念相同。这将取消链接需要写入权限的文件(修改磁盘)。
答案 2 :(得分:0)
在任何操作系统中删除文件都是对主文件表引用的修改,它会通知OS文件所在的位置。