拝見していただきありがとうございます。
不足・不手際等ございましたら、ご指摘いただければと思います。
###前提・実現したいこと
ボタンを押下時に、
カメラかギャラリーかを選択して画像を取得してImageViewに表示させます。
カメラを選択した際に、撮影した写真はギャラリーの中に残します。
###発生している問題・エラーメッセージ
撮影した写真のファイルサイズが現状では0Bとなってしまうため、
正しいファイルサイズを設定したいです。
###該当のソースコード
Java
1package com.example.sampleappimagefile; 2 3import android.content.ContentValues; 4import android.content.Intent; 5import android.media.ExifInterface; 6import android.media.MediaScannerConnection; 7import android.net.Uri; 8import android.provider.MediaStore; 9import android.support.v7.app.AppCompatActivity; 10import android.os.Bundle; 11import android.view.View; 12import android.widget.ImageView; 13 14public class MainActivity extends AppCompatActivity { 15 private static final int REQUEST_CHOOSER = 1; 16 private Uri m_uri; 17 18 @Override 19 protected void onCreate(Bundle savedInstanceState) { 20 super.onCreate(savedInstanceState); 21 setContentView(R.layout.activity_main); 22 } 23 24 public void getImage(View view) { 25 try { 26 //カメラの起動Intentの用意 27 String imageName = System.currentTimeMillis() + ".jpg"; 28 ContentValues contentValues = new ContentValues(); 29 contentValues.put(MediaStore.Images.Media.TITLE, imageName); 30 contentValues.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); 31 contentValues.put(MediaStore.Images.Media.DISPLAY_NAME, imageName); 32 contentValues.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis()); 33 // 1970/01/01 9:00からの秒のため1000で割る。※ミリ秒ではなく秒 34 contentValues.put(MediaStore.Images.Media.DATE_MODIFIED, System.currentTimeMillis() / 1000); 35 //この時点ではファイルサイズは分からない 36 //contentValues.put(MediaStore.Images.Media.SIZE, size); 37 m_uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues); 38 39 Intent intentCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 40 intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, m_uri); 41 42 //Documentは省略 43 Intent intent = Intent.createChooser(intentCamera, "画像の選択"); 44 startActivityForResult(intent, REQUEST_CHOOSER); 45 } catch (Exception e) { 46 e.printStackTrace(); 47 } 48 } 49 50 @Override 51 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 52 try { 53 super.onActivityResult(requestCode, resultCode, data); 54 // カメラかギャラリーの写真 55 if (requestCode == REQUEST_CHOOSER) { 56 if (resultCode != RESULT_OK || data != null && data.getAction() == null) { 57 // キャンセル時または、ギャラリーから選択を選び、不要となったカメラintentの画像元データを削除する 58 getContentResolver().delete(m_uri, null, null); 59 return; 60 } 61 62 Uri resultUri = null; 63 if (data != null) { 64 resultUri = data.getData(); 65 } else { 66 resultUri = m_uri; 67 } 68 69 // 画像を取得に失敗 70 if (resultUri == null) { 71 return; 72 } 73 74 MediaScannerConnection.scanFile( 75 this, 76 new String[]{resultUri.getPath()}, 77 new String[]{"image/jpeg"}, 78 null 79 ); 80 81 ExifInterface ex = new ExifInterface(resultUri.getPath()); 82 //ファイルサイズに該当する属性が分からない 83 //ex.setAttribute(ExifInterface.SIZE?, size); 84 ex.saveAttributes(); 85 86 // 画像を設定 87 ImageView imageView = (ImageView) findViewById(R.id.imageView); 88 imageView.setImageURI(resultUri); 89 } 90 } catch (Exception e) { 91 e.printStackTrace(); 92 } 93 } 94} 95
###試したこと
contentValues.put(MediaStore.Images.Media.SIZE, size);
ここに値を入れればファイルサイズに反映するが、
写真撮影前のため正しい値が分からない。
ExifInterface ex = new ExifInterface(resultUri.getPath()); //ex.setAttribute(ExifInterface.SIZE?, size); ex.saveAttributes();
これでExifに追加できそうだが、
ファイルサイズに該当する属性が分からない。
端末のギャラリーの設定にある
「情報の更新とキャッシュの削除」を行うと正しいファイルサイズがセットされるが
アプリの時点で正しいファイルサイズを設定したいです。
よろしくお願いいたします。
###補足情報
Android Studio 2.2.2
端末 SH-05G
Androidバージョン 5.0.2
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/25 04:21
2016/10/25 04:43
2016/10/25 06:18
2016/10/25 06:27
2016/10/25 11:50