2010年11月25日木曜日

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

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

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

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

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

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

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

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

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

完成が近づいてきたぜー

0 件のコメント:

コメントを投稿