Saving Files の続きをやります。
今回は、外部ストレージの保存法です。
外部ストレージを使う場合マニフェストファイルに以下を追加します。
<manifest ...>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
...
これは、今は外部のアクセスは基本的に制限は無いですが
将来的に制限がつく可能性があるので、その対応策です。
外部ストレージの場合まず、それが保存できる状態がどうかを
調べる必要があります。以下のメソッドを使用します。
String state = Environment.getExternalStorageState();
読書き可能か調べる
if (Environment.MEDIA_MOUNTED.equals(state)){ ...
少なくとも読み取れる
if (Environment.MEDIA_MOUNTED.equals(state) ||
Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { ...
外部ストレージに保存されるファイルは2種類あります
パブリックファイル
他のアプリ、ユーザーが自由に利用可能であるべきファイル。
撮影した写真など。
プライベートファイル
自分のアプリでしか利用価値の無いファイル。
追加リソースなど。
2つのファイルの保存位置の取得方法
パブリックファイルの場合
File file = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), albumName);
DIRECTORY_PICTURES のほかに
DIRECTORY_MUSIC などもあり用途によって使い分けます。
プライベートファイルの場合
File file = new File(context.getExternalFilesDir(
Environment.DIRECTORY_PICTURES), albumName);
このフォルダファイルはアプリ削除のとき同時にアンインストールされます。
あと、保存時の容量オーバーによって IOException が発生しないように
getFreeSpace()
getTotalSpace() などを使って事前にチェックしておきます。
最後に、ファイルの削除について
オープンされたファイルがあるなら
myFile.delete();
内部ストレージのファイルはファイル名を検索して
myContext.deleteFile(fileName);
また内部キャッシュのファイルは定期的に
必要に応じて削除する必要があります。
さて、今回は2回に分けましたが結構長かったです。
そして次回も長そうな予感。

本日は以上です。
