1 package jp.sourceforge.gokigen.memoma.fileio;
4 import java.io.FileOutputStream;
5 import java.io.OutputStream;
6 import java.text.SimpleDateFormat;
7 import java.util.Calendar;
8 import android.app.ProgressDialog;
9 import android.content.Context;
10 import android.graphics.Bitmap;
11 import android.graphics.Bitmap.CompressFormat;
12 import android.os.AsyncTask;
13 import android.util.Log;
14 import android.view.View;
16 import jp.sourceforge.gokigen.memoma.Main;
17 import jp.sourceforge.gokigen.memoma.R;
20 * データをファイルに保存するとき用 アクセスラッパ (非同期処理を実行)
21 * Viewの情報を画像形式(png形式)で保存する。
22 * どのViewを保存するのかは、ICaptureExporter.getCaptureTargetView()クラスを使って教えてもらう。
25 * String : 実行時に渡すクラス(Param) : ファイル名をもらう
26 * Integer : 途中経過を伝えるクラス(Progress) : 今回は使っていない
27 * String : 処理結果を伝えるクラス(Result) : 結果を応答する。
32 public class ViewCaptureExporter extends AsyncTask<String, Integer, String>
34 private ICaptureExporter receiver = null;
35 private ExternalStorageFileUtility fileUtility = null;
36 private String exportedFileName = null;
38 private ProgressDialog savingDialog = null;
40 private Bitmap targetBitmap = null;
45 public ViewCaptureExporter(Context context, ExternalStorageFileUtility utility, ICaptureExporter resultReceiver)
47 receiver = resultReceiver;
48 fileUtility = utility;
50 // プログレスダイアログ(「保存中...」)を表示する。
51 savingDialog = new ProgressDialog(context);
52 savingDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
53 savingDialog.setMessage(context.getString(R.string.dataSaving));
54 savingDialog.setIndeterminate(true);
55 savingDialog.setCancelable(false);
58 /** ファイルをバックアップするディレクトリを作成する **/
59 File dir = new File(fileUtility.getGokigenDirectory() + "/exported");
68 protected void onPreExecute()
76 View targetView = receiver.getCaptureTargetView();
77 targetView.setDrawingCacheEnabled(false);
78 targetView.setDrawingCacheEnabled(true);
79 targetBitmap = Bitmap.createBitmap(targetView.getDrawingCache());
80 targetView.setDrawingCacheEnabled(false);
85 Log.v(Main.APP_IDENTIFIER, "ViewCaptureExporter::onPreExecute() : " + ex.toString());
90 * ビットマップデータを(PNG形式で)保管する。
94 private String exportToFile(String fileName)
96 String resultMessage = "";
99 if (targetBitmap == null)
101 // ビットマップが取れないため、ここで折り返す。
102 return ("SCREEN DATA GET FAILURE...");
105 // エクスポートするファイル名を決定する
106 Calendar calendar = Calendar.getInstance();
107 SimpleDateFormat outFormat = new SimpleDateFormat("yyyyMMddHHmmss");
108 exportedFileName = fileName + "_" + outFormat.format(calendar.getTime()) + ".png";
111 OutputStream out = new FileOutputStream(exportedFileName);
112 targetBitmap.compress(CompressFormat.PNG, 100, out);
118 resultMessage = " ERR(png)>" + e.toString();
119 Log.v(Main.APP_IDENTIFIER, resultMessage);
122 return (resultMessage);
127 * (バックグラウンドで実行する(このメソッドは、UIスレッドと別のところで実行する))
131 protected String doInBackground(String... datas)
133 // ファイル名の設定 ... (拡張子なし)
134 String fileName = fileUtility.getGokigenDirectory() + "/exported/" + datas[0];
137 String result = exportToFile(fileName);
149 protected void onProgressUpdate(Integer... values)
159 protected void onPostExecute(String result)
163 if (receiver != null)
165 receiver.onCaptureExportedResult(exportedFileName, result);
170 Log.v(Main.APP_IDENTIFIER, "ViewCaptureExporter::onPostExecute() : " + ex.toString());
173 if (savingDialog != null)
175 savingDialog.dismiss();
186 public interface ICaptureExporter
188 /** データをキャプチャする Viewを取得する **/
189 public abstract View getCaptureTargetView();
192 public abstract void onCaptureExportedResult(String exportedFileName, String detail);