2009-07-30 21 views
29

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

答えて

9

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

旧回答:

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

+0

...ファイル名と

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

と行くために、あなたの準備ができて、あなたの準備を指定する必要がありますか。 – user121196

+0

使用しているルートパスを調整します。 (それはちょっと混乱していました...あなたはAndroidのルートパスを変更できません) – haseman

+0

私はデータベースを作成するためにSQLiteDatabaseを使用していますが、そのコンストラクタのname引数にはパスを含めることはできませんsdcardのデータベース? – user121196

2

SDカードを使用する際の問題点は、アプリケーションが必要とするときにSDCardが常に存在するとは確信できないということです。内部メモリの場合はそうではありません。あなたのアプリケーションがこのデータに依存しない限り、それはうまくいくはずです。

76

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

+1

Samsungの*実際の* SDカードの場所が 'Environment.getExternalStorageDirectory()+"/external_sd "であるため、これは必ずしも機能しません。他のデバイスは異なる場所に配置されます。 – Muz

13

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

外部ストレージは、アプリケーション固有またはパブリックです。 getExternalStorageDirectoryメカニズムの代わりに、 getExternalFilesDir()getExternalStoragePublicDirectory()の方法があります。

3

SDカードのルートポイントとして/ mnt/sdcardを使用しているデバイスもあります。開始するに

33

モデル/ OSによっては、あなたがSDカードのルートディレクトリにアクセスすることができます。

File externalStorage = Environment.getExternalStorageDirectory(); 

これは、内蔵SDストレージまたは内蔵SDメモリを参照します。

externalStorage.getAbsolutePath() 

はこと、外部SDメモリまたはマイクロSDにアクセスするには、次のいずれかの値

"/ SDカード/" または "を/ mnt/SDカード/"

が返されあなたは通常、携帯電話/タブレットの外から接続します。アンドロイドが外部メモリを指すように作成する次のフォルダのいずれかを使用する必要があります。

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

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

"/mnt/sdcard/" 

PSは:あなたは空のフォルダexternal_sdまたはsdメモリ

内部SDカード上に気づくことができ、このフォルダは空であり、その外部のマイクロSDカードを指すために使用します。

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

最後にあなたはどのようにルートパスを調整していますか?

+1

残念ながら、これは絶対に標準ではありません。 LG Optimusでは/ mnt/sdcard/_ExternalSDにあります。私は誰かがGoogleですべてを検討するつもりです願っています。メディアのネーミングは非常に悪い(外部???)、内蔵のものが1つあるときは、2番目のsdcardにアクセスする方法についてドキュメントには言わない。 – Snicolas

+0

SDカードに存在するすべてのフォルダ名を取得するのに手伝ってください。 –

関連する問題