アプリでアプリケーションDBをSDカードにアーカイブしたいのですが。私のコードでは、ディレクトリcanWrite()が存在するかどうかを確認し、存在しない場合はIOException。をスローします。この特定の例では、dbファイルをSDカードのルートディレクトリにコピーしようとしていますが、がスローされますIOException。フォルダ/ファイルへの書き込みを可能にするために、そのアクセス許可を変更するにはどうすればよいですか?
回答:
あなたはSDカードディレクトリがそうであるということは正しいです、/sdcardしかしあなたはそれをハードコーディングするべきではありません。代わりに、を呼び出してEnvironment.getExternalStorageDirectory()ディレクトリを取得します。
File sdDir = Environment.getExternalStorageDirectory();
まだ行っていない場合は、以下の行をマニフェストに追加して、アプリにSDカードへの書き込みを許可する正しい権限を与える必要があります。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
WRITE_EXTERNAL_STORAGE1.6で導入されたため、上位互換性を持たせるには、アプリケーションに含める必要があります。
上記のDaveの回答で提案された手法は確かに優れた設計手法であり、最終的には、外部ストレージにアクセスするために必要なアクセス許可をAndroidManifest.xmlファイルに設定する必要があります。
ただし、ほとんどの(すべてではないにしても、確実ではない)「マニフェストオプション」を追加するモノ風の方法は、アクティビティ(またはサービス)を実装するクラスの属性を使用することです。
Visual Studio Monoプラグインはマニフェストを自動的に生成するため、手動で改ざんしないことをお勧めします(他に選択肢がない場合もあると思います)。
例えば:
[Activity(Label="MonoDroid App", MainLauncher=true, Permission="android.permission.WRITE_EXTERNAL_STORAGE")]
public class MonoActivity : Activity
{
protected override void OnCreate(Bundle bindle)
{
base.OnCreate(bindle);
}
}