web-dev-qa-db-ja.com

Xamarin Androidテキストファイルを保存

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" />

どうすればエラーを修正できますか?

9
Wuhu

Android 6.0+を使用している場合は、権限のランタイムチェックを実行する必要があります。これは次のように実行できます。

if ((CheckSelfPermission(Permission.ReadExternalStorage) == (int)Permission.Granted) && 
    (CheckSelfPermission(Permission.WriteExternalStorage) == (int)Permission.Granted))

これに関する詳細は、Androidドキュメント ここ )にあります。

3
aaron-bond

ファイルが存在しない場合は、最初に作成してから、絶対パスを取得してデータを書き込みます。

     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 ();
        }
1

私は同じ問題を抱えていましたが、数時間を費やした後、23より高いSDKで実行している場合、Android 6より高いバージョンでは、ユーザーへのアクセス要求を実装する必要があることがわかりました。詳細はこちら this link

0
batmaci