androidで写真などのファイル保存場所は3種類ある
iOSでは、ファイルの置き場所は、アプリサンドボックス内とアプリグループ用とiCloud用と3種類ある。
androidの場合も3種類あり、置き場所によってアプリ間で共有できたりできなかったりする。
androidで写真などのファイル保存場所は次の3種類ある。
<注意点>
・保存場所指定は ContentResolver で insert するときの
MediaStore.Images.Media.EXTERNAL_CONTENT_URI 外部ストレージ
MediaStore.Images.Media.INTERNAL_CONTENT_URI 内部ストレージ
と合わせる必要がある。
<使用例>
Uri uri = cr.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, cv);
1)外部ストレージ パブリックファイル
・フォトなどの他のアプリとファイルを共有できる。
getExternalStoragePublicDirectory()x (deprecated) getExternalStorageDirectory()
<使用例>
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), filename);
<パス>
/storage/sdcard0/
2)外部ストレージ プライベートファイル
・フォトなどの他のアプリとファイルを共有できる。
・ファイルは、アプリ・アンインストールと同時に削除される。
getExternalFilesDir()
<使用例>
File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), filename);
<パス>
/storage/sdcard0/Android/data/(package name)/files/
3)内部ストレージ
・アプリ用の内部ディレクトリ(iOSのアプリバンドルと同じ)
・フォトなどの他のアプリとファイルを共有できない。
・アプリ・アンインストールと同時に削除される。
getFilesDir()
<使用例>
File file = new File(context.getFilesDir(), filename);
<パス>
/data/data/(package name)/files/
・番外編
・システムはストレージが不足し始めた場合、警告なしでキャッシュ ファイルを削除する。
getCacheDir()
<使用例>
String fileName = Uri.parse(url).getLastPathSegment();file = File.createTempFile(filename, null, context.getCacheDir());String state = Environment.getExternalStorageState();if (Environment.MEDIA_MOUNTED.equals(state)) {}
・空き領域チェック
getFreeSpace() または getTotalSpace()