首页 > 解决方案 > Xamarin Forms Android 无法从图库或 App 文件夹中删除图像,且不显示错误

问题描述

我有一个 Xamarin Forms Android 应用程序,我无法使用该应用程序从图库或应用程序文件夹中删除图像。失败后不显示错误。我的目标是 Android 10.0。相关代码如下:

\界面

using System;
using System.Collections.Generic;
using System.Text;

namespace TCmTickets
{
    public interface IDeleteFromFile
    {
        void DeleteFile(string source);
    }
}

\班级

using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using System.IO;
using Xamarin.Forms;

[assembly: Dependency(typeof(TCmTickets.Droid.DeleFromFile))]
namespace TCmTickets.Droid
{

    class DeleFromFile : IDeleteFromFile
    {
        public void DeleteFile(string source)
        {
            File.Delete(source);
        }
    }
}

\主要活动

    DependencyService.Register <DeleFromFile>();

    DependencyService.Get<DeleFromFile>();

\功能

private async void DeleteFileTest()
{
    var file = await Plugin.Media.CrossMedia.Current.PickPhotoAsync(new Plugin.Media.Abstractions.PickMediaOptions
    {
        PhotoSize = Plugin.Media.Abstractions.PhotoSize.Medium,
    });


    if (file != null)
    {
        if (File.Exists(file.Path))
        {
            DependencyService.Get<IDeleteFromFile>().DeleteFile(file.Path);
        }
        file.Dispose();
    }
}


void btnDeleteFile_Clicked(object sender, EventArgs e)
{
    DeleteFileTest();
}

这可能与 Android 10 有关吗?我使用了正确的权限 - 我在 Android Manifest 中包含以下内容

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.TCmTickets" android:installLocation="preferExternal">
    <uses-sdk android:minSdkVersion="25" android:targetSdkVersion="29" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-feature android:name="android.hardware.location" android:required="false" />
    <uses-feature android:name="android.hardware.location.gps" android:required="false" />
    <uses-feature android:name="android.hardware.location.network" android:required="false" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <application android:label="TCmTickets.Android" android:requestLegacyExternalStorage="true">
        <provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.fileprovider" android:exported="false" android:grantUriPermissions="true">
            <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"></meta-data>
        </provider>
        <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="xxxx" />
        <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
        <uses-library android:name="org.apache.http.legacy" android:required="false" />
    </application>
</manifest>

标签: androidxamarin.forms

解决方案


推荐阅读