web-dev-qa-db-ja.com

SDカードにアプリケーションデータを保存するAndroid=

Android内部メモリではなくSDカードにアプリケーションデータを保存する方法はありますか?内部メモリからSDCardにアプリケーションsqliteデータベースを転送する方法を知っていますが、そもそも内部メモリがいっぱいになりますか?誰もこれをどのように処理しますか?

30
user121196

警告:この答えは時代遅れです。 Environment.getExternalStorageDirectory() を使用して、以下の回答に記載されているSDカードのルートパスを取得する必要があります。

古い回答なので、これに関するコメントは理にかなっています:

/sdcard/をルートに追加すると、パスはAndroidアプリケーションがSDカードを使用するように指示する必要があります(少なくともG1では動作します)。Androidのファイルシステムオブジェクトは機能を提供します。ファイルサイズをチェックするため...(トリッキーな場合)フェイルオーバーコードを書くことができるはずですこのコードは、内部メモリがいっぱいになった場合にルートパスを調整します。

9
haseman

"/ sdcard"をハードコードするよりも Environment.getExternalStorageDirectory() を使用することをお勧めします。フォルダー名がそれと呼ばれるかどうかは必ずしも確実ではありません。また、Environmentクラスには、外部ストレージが使用可能かどうかを確認するためのgetExternalStorageState()メソッドが用意されています。

76
yincrash

始める:

モデル/ OSに応じて、次の方法でsdカードのルートディレクトリにアクセスできます。

File externalStorage = Environment.getExternalStorageDirectory();

これは、内部sdストレージまたは内部sdメモリを指します。

externalStorage.getAbsolutePath() 

次の値のいずれかを返します

「/ sdcard /」または「/ mnt/sdcard /」

通常、携帯電話/タブレットの外部から接続する外部SDメモリまたはマイクロSDにアクセスするには、Androidが作成する外部メモリを指す以下のフォルダのいずれかを使用する必要があります。

"/mnt/sdcard/sd" 
"/mnt/sdcard/external_sd"

"/sdcard/external_sd"
"/sdcard/sd" 

"/mnt/sdcard/"

ps:空のフォルダーexternal_sdまたはsd内部SDカード

メモリ、このフォルダは空で、外部のマイクロSDカードを指すために使用されます。

最後に、SDカードへの読み取り/書き込みアクセス権があることを確認してくださいAndroid.permission.WRITE_EXTERNAL_STORAGE Android manifest xml。

最後に、ファイル名と準備完了を指定する必要があります

private SQLiteDatabase DB = null;

private static final String DATABASE_NAME = "MyDb.db"; 
////////////
File sdcard = Environment.getExternalStorageDirectory();

String dbfile = sdcard.getAbsolutePath() + File.separator+ "external_sd" + File.separator + DATABASE_NAME;

DB = SQLiteDatabase.openDatabase(dbfile, null,SQLiteDatabase.NO_LOCALIZED_COLLATORS);
///////////

そしてあなたの準備ができて...

33
Rabih harb

ここにもう一つのきちんとした小さなトリックがあります。 Application には、パスを取得するために呼び出されるいくつかのメソッドがあります。特に、アプリケーションにはメソッド getDatabasePath withがあり、 SQLiteOpenHelper でパスを構築するために使用されます。カスタムアプリケーションクラスは、これらのメソッドをオーバーライドして、 getExternalStorageDirectory のパスを含むさまざまなパスを提供できます。

外部ストレージは、アプリケーション固有またはパブリックです。 getExternalStorageDirectory メカニズム、 getExternalFilesDir() および getExternalStoragePublicDirectory() を置き換えるメソッドがあります。

13
phreed

一部のデバイスは、SDカードへのルートポイントとして/ mnt/sdcardを使用します。

3
Loris Albanese

SDCardを使用する際の問題は、アプリケーションで必要なときに常に存在することを確実に想定できないことです。これは内部メモリには当てはまりません。アプリケーションが実行するためにこのデータに依存しない限り、それは問題ないはずです。

2
Prashast