【发布时间】:2020-02-03 21:51:17
【问题描述】:
我正在尝试从 sd 卡中删除通过移动应用程序保存的图像。
我在 xamarin 表单中使用 contentresolver.Delete 通过它临时删除图像。
在 sd 卡图像详细信息路径不同,并且 sd 卡的文件管理器图像保存在不同路径中。
如果我使用
File.delete(file)
它抛出一个异常,说我无权删除该位置的文件(这是 sd 卡图像路径)
以下是 Android 清单中添加的权限:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_FORMAT_FILESYSTEMS" />
查找sd卡路径的代码:
var file1 = new Java.IO.File("storage/");
listOfStorages = file1.ListFiles();
if (listOfStorages[1].Name.Contains("emulated") || listOfStorages[0].Name.Contains("-"))
{
isSDPresent = true;
var sdfilepath = listOfStorages[0].AbsolutePath + "/DCIM/Camera/";
bool status = Android.OS.Environment.IsExternalStorageEmulated;
List<string> sdimagelist = Directory.GetFiles(sdfilepath).Where(x => new FileInfo(x).CreationTime.Date == DateTime.Today.Date).ToList();
foreach (var filpath in sdimagelist)
{
if (!currentDCIMImagesList.Contains(filpath))
{
currentDCIMImagesList.Add(filpath);
}
}
}
从 SD 卡中删除图像的代码:
var query = afterDCIMImagesList.Where(item => !currentDCIMImagesList.Contains(item));
foreach (string file in query)
{
Java.IO.File aFile = new Java.IO.File(file);
string where = MediaStore.MediaColumns.Data + "=?";
string[] selectionArgs = new string[] { aFile.AbsolutePath };
ContentResolver contentResolver = context.ContentResolver;
Android.Net.Uri filesUri = MediaStore.Files.GetContentUri("external");
if (aFile.Exists())
{
//Android.Net.Uri uri = Android.Net.Uri.Parse(file);
//contentResolver.Delete(uri, null, null);
contentResolver.Delete(filesUri, where, selectionArgs);
}
请帮我解决这个问题。 谢谢
【问题讨论】:
-
我在装有 OS 7 的 LG 手机上看到了这个问题
标签: android xamarin.forms android-sdcard