android - 如何在 Android 中删除 SD 卡文件
问题描述
我试图从图库中删除图像文件,但它不会。图像文件正常输出,分享功能完成。它不能在我的应用程序中写入和删除。文件将从默认应用程序中删除。我尝试使用 File 类和 ContentResolver 删除它。但文件没有被删除。Android targetSdkVersion 为 26,compileSdkVersion 为 28。
显现
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
我从 getSDcardPath() 获取 SDcard 路径
public String getSDcardPath(Context context) {
File[] storage = ContextCompat.getExternalFileDirs(context, null);
if(storage.length > 1 && storage[0] != null && storage[1] != null)
return storage[1].toString();
else
return "";
}
使用的文件类代码
public void useFileClass() {
File mFile = new File("file Parent + file NAME");
if (mFile.exists()) {
mFile.delete();
}
}
使用的 ContentResolver 代码
public void useContentResolver(Context context, File mFile) {
ContentResolver contentResolver = context.getContentResolver();
Uri mUri = getUri(context, mFile);
contentResolver.delete(mUri, null, null);
}
public Uri getUri(Context context, File mFile) {
Uri mUri;
mUri = FileProvider.getUriForFile(context, "MyApplication", mFile);
return mUri;
}
分享代码
public void shareImage() {
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.setType("image/*");
shareIntent.putExtra(Intent.EXTRA_STREAM, getUri(this, mFile));
startActivity(Intent.createChooser(shareIntent, "Share image too..."));
}
解决方案
在访问存储之前,您需要请求权限。试试这个:
private static final int MY_WRITE_STORAGE_PERMISSION_CODE = 200;
private void checkPermission() {
if (ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_WRITE_STORAGE_PERMISSION_CODE);
} else {
// Todo (Add, Delete, Edit, ...)
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode == MY_WRITE_STORAGE_PERMISSION_CODE)
{
if (ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
// Todo (Add, Delete, Edit, ...)
} else {
// Permission Deny
}
}
}
希望这对您有所帮助。
推荐阅读
- python - numpy.argwhere 文档中的“按元素分组”是什么意思?
- javascript - 如果以一种语言创建特定的语法糖,是否可以按操作顺序优先于分组运算符()?
- python - 为什么这个自定义求和函数给我错误
- node.js - 使用 .find() 方法读取嵌套的 JSON
- indesign-server - TimeStampSigner 通过签名服务器上的文件上传
- css - 为什么我的角度动画不起作用?
- java - 为类中定义的名称为“myCoach”的 bean 加载类 [com.Luv2code.springdemo.TrackCoach] 时出错
- javascript - CKEditor 中未出现 Youtube 视频插入按钮
- c++ - 参数模板函数中的常量
- python - Pandas:如果值存在于具有映射条件的特定列中,则创建具有特定时间索引值的新列