Xamarin.Androidを使用していて、.txt
ファイルをSDカードに保存したいと思います。これが私が使用しているコードです:
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());
}
}
}
ただし、次のエラーが発生します。
System.UnauthorizedAccessException:パス「/mnt/sdcard/iootext.txt」へのアクセスが拒否されました。
マニフェストに以下を追加しました。
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE" />
どうすればエラーを修正できますか?
Android 6.0+を使用している場合は、権限のランタイムチェックを実行する必要があります。これは次のように実行できます。
if ((CheckSelfPermission(Permission.ReadExternalStorage) == (int)Permission.Granted) &&
(CheckSelfPermission(Permission.WriteExternalStorage) == (int)Permission.Granted))
これに関する詳細は、Androidドキュメント ここ )にあります。
ファイルが存在しない場合は、最初に作成してから、絶対パスを取得してデータを書き込みます。
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 ();
}
私は同じ問題を抱えていましたが、数時間を費やした後、23より高いSDKで実行している場合、Android 6より高いバージョンでは、ユーザーへのアクセス要求を実装する必要があることがわかりました。詳細はこちら this link