[英](Solved) How do I specify file path for Android's getExternalStorageState()?
[英]How do I delete a file using it's path on Android 7?
我的存储卡上有一个文件,其路径为: /storage/7AB3-1EEF/EXTERNAL_eicar-tf.com
使用File
类,我可以读取它,但是不能删除它。
那么,如何仅使用文件的真实路径删除文件? 如果文件存储在/storage/0/[file]
则我的代码有效
清单中写的权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
该代码在Android 4.2.2上完全可用
我尝试将文件转换为URI并将其删除,但出现了“未知URL”错误消息。
Uri ur = Uri.fromFile(new File(reports.get(getAdapterPosition()).getPath()));
context.getContentResolver().delete(ur, null, null);
我按钮的代码:
button_Delete_File.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
File file = new File(reports.get(getAdapterPosition()).getPath()); //Here comes out the described path...
file.delete();
Log.e("File deleted?", reports.get(getAdapterPosition()).getPath());
if (!file.exists()) {
Log.e("Yes", reports.get(getAdapterPosition()).getPath());
} else {
Log.e("No", reports.get(getAdapterPosition()).getPath());
Toast.makeText(context, context.getResources().getString(R.string.delete_file_error), Toast.LENGTH_SHORT).show();
}
}
});
我做的! 感谢CommonsWare先生关于Storage Access Framework 的观点,我能够重做我的代码:
button_Delete_File.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) { //Remove item from list and delete assigned file.
if (Build.VERSION.SDK_INT >= 19) {
try {
Uri uri = Uri.parse(reports.get(getAdapterPosition()).getPath());
ContentResolver contentResolver = context.getContentResolver();
contentResolver.takePersistableUriPermission(uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
DocumentsContract.deleteDocument(contentResolver, uri);
reports.remove(getAdapterPosition());
notifyItemRemoved(getAdapterPosition());
} catch (FileNotFoundException e) {
Toast.makeText(context, context.getResources().getString(R.string.delete_file_not_found), Toast.LENGTH_SHORT).show();
}
} else {
File file = new File(reports.get(getAdapterPosition()).getPath());
file.delete();
if (!file.exists()) {
reports.remove(getAdapterPosition());
notifyItemRemoved(getAdapterPosition());
} else {
Toast.makeText(context, context.getResources().getString(R.string.delete_file_error), Toast.LENGTH_SHORT).show();
}
}
}
});
现在它可以在Android 4.2.2和7.0上运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.