Android 外部ストレージのパスの違い
Androidの外部ストレージのパスの取得方法が色々あるんですが、ちょっとずつ違い、そしてややこしいので、自分でまとめておきます。
初めに、外部ストレージと言っても、必ずやSDカードをさすわけではありません。リムーバブルなメディアをさすわけでもなく、まぁ歴史的な由来から、内部でInternal storageとExternal storageと分かれているようです。(紛らわしいので辞めてほしい(>_<)) じゃあ、違いってなんなの?とお思いでしょうから、下記のサイトの日本語訳ではありますが、載せておきます。 http://developer.android.com/training/basics/data-storage/files.html
- 内部ストレージ(Internal storageとは)
- 常に使える
- そのファイルを作ったアプリしかそのファイルにアクセスできない
- アプリのアンインストール時にファイルも自動的に削除される
- 外部ストレージ(Internal storageとは)
- 常に使えるとは限らない。ユーザーがUSB経由でストレージとしてパソコンなどからマウントしてたり、スマートフォンから取り外されているかもしれない
- ファイルを作ったアプリ以外からアクセスできる
- アプリをアンインストールの際は、getExternalFilesDir()で作ったファイル以外は自動的に消去されない
さて、肝心のメソッドの使いわけです。
下記を使うと、デフォルトの外部ストレージ内のアプリ個別のフォルダに入れてくれます。
例:Experia SO-04Dだと
/mnt/sdcard/Android/data/アプリのパッケージ名/files/Pictures/
になります。
File file = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
下記を使うと、デフォルトの外部ストレージのルートが指定されます。
例:Experia SO-04Dだと
/mnt/sdcard/Android/data/アプリのパッケージ名/files/Pictures/
になります。
File file = new File(Environment.getExternalStorageDirectory().getPath());
デフォルトの外部ストレージのルートを指定すると、ここにごちゃごちゃファイルがたまってしまうので、避けたほうがよいでしょう…
すみません!時間の都合で使い訳とかいいながら、2つしか紹介できませんでした(つД`)
俺たちの戦いはまだ終わらない!
いつか更新します!!!