java – 无法删除SD卡上的文件
作者:互联网
我想删除SD卡上的一些文件,但我没有想法..
我尝试了File.delete()方法,然后我尝试了file.getCanonicalFile().delete()
还有很多 ..
我的应用程序只能删除设备存储上的文件.
我已经获得了Manifest文件中定义的权限,如下所示.
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
我也要求代码允许:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
new AlertDialog.Builder(this)
.setTitle(R.string.read_storage_message)
.setPositiveButton(R.string.ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
ActivityCompat.requestPermissions(activity,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MainActivity.READ_STORAGE_PERMISSION_ID);
}
}
)
.setNegativeButton(R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
AppKiller.kill();
}
}
).show();
}
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
new AlertDialog.Builder(this)
.setTitle(R.string.write_storage_message)
.setPositiveButton(R.string.ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
ActivityCompat.requestPermissions(activity,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, MainActivity.STORAGE_PERMISSION_ID);
}
}
)
.setNegativeButton(R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
AppKiller.kill();
}
}
).show();
}
}
我使用以下方法删除文件,但正如我之前提到的,我已经使用了Stack-overflow和其他方法中的大量解决方案.
protected boolean delete(Context context) throws Exception {
boolean delete = false;
File file = new File(Environment.getExternalStorageDirectory().getPath() + getName());
if (file.exists()) {
delete = file.delete();
if (!delete) {
delete = file.getCanonicalFile().delete();
}
if (!delete) {
String deleteCmd = "rm -r " + file.getAbsolutePath();
Runtime runtime = Runtime.getRuntime();
runtime.exec(deleteCmd);
}
}
return delete;
}
可能是因为我要求READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限,但在代码中我只是获得READ_EXTERNAL_STORAGE而另一个被Android忽略(在我接受第一个后,它不会显示权限WRITE_EXTERNAL_STORAGE弹出的允许拒绝选项).是不是因为他们在android中具有相同的权限级别?
什么可能是错的?
解决方法:
是的,你不能使用File类从现代Android版本的SD卡上删除文件.
请改用Storage Access Framework.
看看Intent.OPEN_DOCUMENT_FILE和OPEN_DOCUMENT_TREE.
标签:java,android,delete-file,android-sdcard 来源: https://codeday.me/bug/20190622/1262154.html