SDカードへの書き込み許可


80

アプリでアプリケーションDBをSDカードにアーカイブしたいのですが。私のコードでは、ディレクトリcanWrite()が存在するかどうかを確認し、存在しない場合はIOException。をスローします。この特定の例では、dbファイルをSDカードのルートディレクトリにコピーしようとしていますが、がスローされますIOException。フォルダ/ファイルへの書き込みを可能にするために、そのアクセス許可を変更するにはどうすればよいですか?

回答:


209

あなたはSDカードディレクトリがそうであるということは正しいです、/sdcardしかしあなたはそれをハードコーディングするべきではありません。代わりに、を呼び出してEnvironment.getExternalStorageDirectory()ディレクトリを取得します。

File sdDir = Environment.getExternalStorageDirectory();

まだ行っていない場合は、以下の行をマニフェストに追加して、アプリにSDカードへの書き込みを許可する正しい権限を与える必要があります。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

ありがとう...私はあなたの提案に従って私のコードを変更します。しかし、現在私はそれをハードコーディングしていて、マニフェストファイルに権限が設定されていませんが、とにかくそれをSDカードに保存することができます。権限が設定されていなくても保存できるのはなぜですか?
バグジー2010

4
@ user244190-私の推測では、お使いの携帯電話はAndroid1.5を実行しています。 WRITE_EXTERNAL_STORAGE1.6で導入されたため、上位互換性を持たせるには、アプリケーションに含める必要があります。
Dave Webb

@DaveWebb:ここで私の質問を参照してください。stackoverflow.com/questions/9351904/...
Saher Ahwal

誰も応答しておらず、なぜそれが機能しないのかわかりません。
Saher Ahwal 2012

@ DaveWebb-正しい考えですが、おそらく電話が1.5を実行しているのではなく、アプリが1.5に対して構築されていることを指定しているか、(より一般的には)バージョンをまったく指定しておらず、最近の電話で追加されたことがわかります下位互換性のための許可。
クリス・ストラットン

1

上記の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);
  }
}

実際、このWRITE_EXTERNAL_STORAGE設定はユーザー権限であり、上記のように設定すると、マニフェストファイルではユーザー権限ではなくアクティビティ設定(android:permission)として表示されることがわかりました。ああ、覚えたばかりですが、ユーザー権限ユーザーにVSのプロジェクトプロパティ(すべての権限のチェックボックスリスト)を設定しました。
samis 2012

1
これらは実際には「user-permission」ではなく「uses-permission」タグですが、それ以外はすべて当てはまります。
samis 2012

絶対に必要なことの1つは、if(Build.VERSION.SDK_INT> = 19){MainActivity.get()。getExternalFilesDirs(null);を呼び出すことです。} // SD / Android / data /your.package.nameにアクセスするには//パッケージディレクトリを自分で作成しないでください。この呼び出しを行わないと、mkdirまたはmkdirsが機能しなくなります。
pstorli 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.