Android開発記録雑記 -22ページ目

Android開発記録雑記

パソコン中級者ぐらいの私が
スマホアプリの開発をしてみようと思い立ち
Androidで動くアプリ開発過程をこれから書き記していきます。

今日は新しい項目 Saving Data の2番目
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回に分けましたが結構長かったです。
そして次回も長そうな予感。

本日は以上です。