Xamarin 形式,myDir.Mkdir(); return 在 Android 项目中为假

Xamarin Form, myDir.Mkdir(); return false in Android project

我需要在我设备的 public 外部存储中创建一个文件夹和文件,这里是我的代码:

Android 清单

<?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.MyApp">
    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <application android:label="MyApp.Android" android:theme="@style/MainTheme">

    <provider
           android:name="androidx.core.content.FileProvider"
           android:authorities="${applicationId}.provider"
           android:exported="false"
           android:grantUriPermissions="true">
      <meta-data
          android:name="android.support.FILE_PROVIDER_PATHS"
          android:resource="@xml/provider_paths" />
    </provider>
  </application>
</manifest>

SaveAndroid.cs 在 Android 项目中:

string exception = string.Empty;
        string root = null;

        //Get the root path in android device.
        if (Android.OS.Environment.IsExternalStorageEmulated)
        {
            root = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, Android.OS.Environment.DirectoryDownloads);
        }
        else
        {
            root = System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments);
        }

        //Create directory and file 
        Java.IO.File myDir = new Java.IO.File(root + "/PDFChantier");
        bool created = myDir.Mkdir();
        Java.IO.File file = new Java.IO.File(myDir, fileName);

但是 myDir.Mkdir() 总是 returns 错误。当我安装我的应用程序时,它要求写入权限,所以权限应该没问题。

我确定我遗漏了一些愚蠢的东西,但我已经尝试了所有 Whosebug 和 Google 答案,但未能成功。

我找到了解决方案:

对于 Android 10 及更新版本,我们需要使用:

string newRoot = Android.App.Application.Context.GetExternalFilesDir(null).AbsolutePath;
        Java.IO.File newMyDir = new Java.IO.File(newRoot + "/PDFChantier");
        bool newCreated = newMyDir.Mkdir();