Ich verwende Xamarin.Android und möchte eine .txt
-Datei auf der SD-Karte speichern. Hier ist der Code, den ich verwende:
private void SavetoSd()
{
var sdCardPath = Android.OS.Environment.ExternalStorageDirectory.Path;
var filePath = System.IO.Path.Combine(sdCardPath, "iootext.txt");
if (!System.IO.File.Exists(filePath))
{
using(System.IO.StreamWriter write = new System.IO.StreamWriter(filePath,true))
{
write.Write(etSipServer.ToString());
}
}
}
Ich erhalte jedoch die folgende Fehlermeldung:
System.UnauthorizedAccessException: Zugriff auf den Pfad "/Mnt/sdcard/iootext.txt" wird verweigert.
Ich habe dem Manifest Folgendes hinzugefügt:
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE" />
Wie kann ich den Fehler beheben?
Wenn Sie Android 6.0 oder höher verwenden, müssen Sie eine Laufzeitprüfung auf Berechtigungen durchführen. Dies kann wie folgt gemacht werden:
if ((CheckSelfPermission(Permission.ReadExternalStorage) == (int)Permission.Granted) &&
(CheckSelfPermission(Permission.WriteExternalStorage) == (int)Permission.Granted))
Weitere Informationen hierzu finden Sie in der Android-Dokumentation hier .
Wenn die Datei nicht vorhanden ist, erstellen Sie zuerst den absoluten Pfad und schreiben Sie Ihre Daten in den Pfad.
Java.IO.File sdCard = Android.OS.Environment.ExternalStorageDirectory;
Java.IO.File dir = new Java.IO.File (sdCard.AbsolutePath + "/MyFolder");
dir.Mkdirs ();
Java.IO.File file = new Java.IO.File (dir,"iootext.txt");
if (!file.Exists ()) {
file.CreateNewFile ();
file.Mkdir ();
FileWriter writer = new FileWriter (file);
// Writes the content to the file
writer.Write (jsonData);
writer.Flush ();
writer.Close ();
}
Ich hatte dasselbe Problem und nachdem ich einige Stunden damit verbracht hatte, stellte ich fest, dass, wenn Sie auf sdk höher als 23 laufen, Android-Version höher als 6, Sie die Zugriffsanforderung für Benutzer implementieren sollten. Weitere Informationen finden Sie hier unter diesem Link