2010年11月25日木曜日

SDに保存した画像がすぐに認識しない件

SDカードに画像を保存した直後は、何故かギャラリー系のアプリから見ることが出来ないんですよね。
一回PCへマウントして、アンマウントしたり、OS自体を再起動したりすれば見れるんですけども。 なんでしょうか。これは。

でも、touch2pixelとかはちゃんと保存した後もすぐ見れるんですよね。これがまた。
なにか特別な保存方法があるんだろうかー。

って、調べてみたら。
ContentResolverってので登録しなきゃいけないんですね。 サムネイル絡みかと思ってたら、こんなのがあるとは・・・。

一応コード
// 保存先を取得
  String status = Environment.getExternalStorageState();
  File fout = null;
  if (!status.equals(Environment.MEDIA_MOUNTED)) {
   // SDカードがマウントされてないので、システムの使える場所に保存
   fout = getContext().getFilesDir();
  } else {
   // SDカードがマウントされているので、勝手にフォルダ作成
   fout = new File("/sdcard/ciasom/");
   fout.mkdirs();
  }
  File fname = new File(fout ,"/ciasom" + getDate() + ".png");
  FileOutputStream fos = new FileOutputStream(fname);
  bitmap.compress(CompressFormat.PNG, 100, fos);
  fos.flush();
  fos.close();
  //メディアに登録作業が必要らしい。
  ContentValues values = new ContentValues();
  ContentResolver contentResolver = getContext().getContentResolver();
  values.put(Images.Media.MIME_TYPE, "image/png");
  values.put(Images.Media.DATE_MODIFIED,System.currentTimeMillis()/1000);
  values.put(Images.Media.SIZE, fname.length());
  values.put(Images.Media.TITLE, fname.getName());
  values.put(Images.Media.DATA, fname.getPath());
  contentResolver.insert(Media.EXTERNAL_CONTENT_URI, values);
これは今作っている可逆モザイクアプリのソースそのままぶっこぬいてきました。

これまたはまったのが、Images.Media.DATE_MODIFIED には更新時間を入れるんだけど、ちょっとぐぐると
「System.currentTimeMillis()」が平気で指定されてるところ。

でも、これで保存すると、2037年とかになっちゃうんですよな。

ここで指定するのは1970年1月1日からの~ってとこまでは一緒なんだけど、「秒数」を入れるらしい。
んで、System.currentTimeMillis()は1970年起点の「ミリ秒」なので、時間が狂う。と。

ちゅーわけで、/1000が要るわけです。 ふむん。

完成が近づいてきたぜー

0 件のコメント:

コメントを投稿