satohu20xx's diary

思ったことをつらつらと

SDカードへとバックアップ

画像ダウンロードしてバックアップするときとかに使いましょう。

サンプルプログラムは以下。

// SDカードが使えるかを判定
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
    // SDカードの中でFileインスタンスを作成
    File file =  new File(getContext().getExternalFilesDir(null), URLEncoder.encode(url));

    // Fileが存在するかを判定
    if (!file.exists()) {
        // 存在しない場合はURLからデータをダウンロード
        // ダウンロードがうまくいったらSDカードに吐き出す
        // ダウンロードは適当に実装してね!
        try{
            FileOutputStream out = new FileOutputStream(file);
            bitmap.compress (Bitmap.CompressFormat.PNG, 100, out);
            out.close();
        } catch (Exception ex){
            
        }
    } else {
        // SDカードにあったらそのまま使う
        bitmap = BitmapFactory.decodeFile(file.getPath());
    }
} else {
    // SDカードが使えなかったら全てダウンロード
    // ダウンロードは適当に実装してね!
}

重要なのはEnvironmentクラス。
こいつでSDカード関連を操作する。

// これでSDカードが使えるかを調べる
Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
// これでSDカードのアプリ独自パスを取ってくる
// /mnt/sdcard/Android/data/AplicationName ってパスになる
Context.getExternalFilesDir(null)

この二つが重要。ってかこれだけ分かってれば使えるんじゃないかな。getExternalFilesDir()で取得できるパスはアプリ独自パスだからアンインストールするとフォルダごとAndroidが削除してくれる。だからサムネイル程度の小さなファイル程度出れば気にせずにがんがん保存してもいいんじゃないかと思う。でかいファイルの場合は時々消してあげる処理を入れてあげる必要があるんだろうね。

SDカードのご利用は計画的に!