31

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

4

6 に答える 6

76

「/sdcard」をハードコードするよりも、 Environment.getExternalStorageDirectory()を使用する方が良い方法です。フォルダー名がそのように呼ばれるかどうかは必ずしも確実ではありません。また、Environment クラスは getExternalStorageState() メソッドを提供して、外部ストレージが利用可能かどうかをチェックします。

于 2010-01-17T20:40:22.780 に答える
33

始める:

モデル/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/"

external_sdps: 空のフォルダーまたはsd内部 SD カードに気付くことができます

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

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

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

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);
///////////

そしてあなたの行く準備ができています...

于 2011-04-26T16:59:45.790 に答える
13

ここで、もう 1 つの巧妙な小技を紹介します。アプリケーションには、パスを取得するために呼び出されるいくつかのメソッドがあります。特に、アプリケーションにはgetDatabasePathメソッドがあり、 SQLiteOpenHelperがパスを作成するために使用します。カスタム アプリケーション クラスは、これらのメソッドをオーバーライドして、 getExternalStorageDirectory内のパスを含むさまざまなパスを提供できます。

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

于 2010-11-18T17:49:12.123 に答える
10

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

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

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

于 2009-07-30T21:42:26.590 に答える
3

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

于 2010-12-16T17:07:49.937 に答える
2

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

于 2009-07-31T02:56:10.237 に答える