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();
我需要在我设备的 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();