###カメラで撮影した後、画像を保存したい。
Android Studioでカメラアプリの修正をしているのですがデバック実行したら、
ExifInterface exif = new ExifInterface(f.getPath());のところで
Utiles.d("-- Error in Camera Shoot image");にいってしまいアプリが落ちてしまいます。、原因がわからず困っています。わかる方いましたらご教示していただけると助かります。
###発生している問題・エラーメッセージ
java.lang.IllegalStateException: Could not execute method for android:onClick at android.view.View$DeclaredOnClickListener.onClick(View.java:4745) at android.view.View.performClick(View.java:5657) at android.view.View$PerformClick.run(View.java:22314) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:241) at android.app.ActivityThread.main(ActivityThread.java:6223) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at android.view.View$DeclaredOnClickListener.onClick(View.java:4740) at android.view.View.performClick(View.java:5657) at android.view.View$PerformClick.run(View.java:22314) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:241) at android.app.ActivityThread.main(ActivityThread.java:6223) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) Caused by: java.lang.RuntimeException: autoFocus failed at android.hardware.Camera.native_autoFocus(Native Method) at android.hardware.Camera.autoFocus(Camera.java:1321) at com.scandal.camera.MyCameraView.onShutterButton(MyCameraView.java:143) at com.scandal.camera.CameraShootActivity.onShoot(CameraShootActivity.java:115) at java.lang.reflect.Method.invoke(Native Method) at android.view.View$DeclaredOnClickListener.onClick(View.java:4740) at android.view.View.performClick(View.java:5657) at android.view.View$PerformClick.run(View.java:22314) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:241) at android.app.ActivityThread.main(ActivityThread.java:6223) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
###該当のソースコード
EditActivity.java
1 2 @Override 3 public void run() { 4 // TODO 自動生成されたメソッド・スタブ 5 try { 6 BitmapFactory.Options myOption = new BitmapFactory.Options(); 7 // 実際に読み込まないで情報だけ取得する 8 myOption.inJustDecodeBounds = true; 9 BitmapFactory.decodeByteArray(mData, 0, mData.length,myOption); 10 if (11<=APIver) {//MAXまでメモリ解放してる 11 if ((myOption.outWidth * myOption.outHeight) > 1024*1024*4) {// 2Mピクセル 1024*1024*2 12 Msample_size = 2; 13 myOption.inPreferredConfig = Bitmap.Config.ARGB_4444; 14 Utiles.d("Camera shot image over 4M,Msample_size = 2"); 15 }else{ 16 Msample_size = 1; 17 Utiles.d("Camera shot image under 4M"); 18 } 19 } else { 20 if ((myOption.outWidth * myOption.outHeight) > 1024*1024*2) {// 2Mピクセル 1024*1024*2 21 Msample_size = 2; 22 myOption.inPreferredConfig = Bitmap.Config.ARGB_4444; 23 Utiles.d("Camera shot image over 2M,Msample_size = 2"); 24 }else{ 25 Msample_size = 1; 26 Utiles.d("Camera shot image under 2M"); 27 } 28 if (maxMem < 24) { 29 // さらにheapが24mb以下だったら画質落とす 30 myOption.inPreferredConfig = Bitmap.Config.RGB_565; 31 } 32 } 33 myOption.inSampleSize = Msample_size; 34 // 実際に読み込む 35 myOption.inJustDecodeBounds = false; 36 Bitmap bitmap = BitmapFactory.decodeByteArray(mData, 0, mData.length,myOption); 37 try { 38 // IMG name 39 Uri uri = Uri.parse(Utiles.getDCIM(ctx) + "/" + createName()); 40 final String savePathString = uri.toString(); 41 File f = new File(savePathString); 42 ExifInterface exif = new ExifInterface(f.getPath()); 43 int orientation = exif.getAttributeInt( 44 ExifInterface.TAG_ORIENTATION, 45 ExifInterface.ORIENTATION_NORMAL); 46 47 int angle = 0; 48 49 if (orientation == ExifInterface.ORIENTATION_ROTATE_90) { 50 angle = 90; 51 } else if (orientation == ExifInterface.ORIENTATION_ROTATE_180) { 52 angle = 180; 53 } else if (orientation == ExifInterface.ORIENTATION_ROTATE_270) { 54 angle = 270; 55 } else { 56 angle = 90; 57 } 58 59 Matrix mat = new Matrix(); 60 mat.postRotate(angle); 61 // get rotated bitmap 62 Bitmap correctBmp = Bitmap.createBitmap(bitmap, 0, 0,bitmap.getWidth(), bitmap.getHeight(), mat, true); 63 // save bitmap 64 Utiles.saveAndInsertDB_BMP(ctx, correctBmp, savePathString); 65 66 bitmap.recycle(); 67 correctBmp.recycle(); 68 69 Utiles.d("Camera shot image width", "" + bitmap.getWidth()); 70 Utiles.d("Camera shot image height", "" + bitmap.getHeight()); 71 Utiles.d("onPictureTaken - bitmap sending.."); 72 73 pActivity.runOnUiThread(new Runnable(){ 74 @Override 75 public void run() { 76 pActivity.closeProgressDialog(); 77 // intent send data 78 Intent intent = new Intent(pActivity, EditActivity.class); 79 //渡した先でファイル名を探すために使う 80 intent.putExtra(EditActivity.KEY_CAMERA_IMG_PATH, savePathString); 81 intent.putExtra("from", "camera"); 82 83 MySharedPref mPref = new MySharedPref(ctx); 84 mPref.putPrefString(EditActivity.KEY_CAMERA_IMG_PATH, savePathString); 85 mPref.putPrefString("from", "camera"); 86 87 Cursor c = ctx.getContentResolver().query(Uri.parse(savePathString), null, null, null, null); 88 if (c != null) { 89 c.moveToFirst(); 90 String path = c.getString(c.getColumnIndex(MediaStore.MediaColumns.DATA)); 91 c.close(); 92 Utiles.d("onPictureTaken MyCameraView savePathString=",path); 93 } 94 ctx.startActivity(intent); 95 pActivity.finish(); 96 } 97 }); 98 99 } catch (IOException e) { 100 Utiles.d("-- Error in Camera Shoot image"); 101 } catch (OutOfMemoryError oom) { 102 Utiles.d("-- OOM Error in Camera Shoot image"); 103 } 104
###試したこと
ExifInterface exif = new ExifInterface(f.getPath());
int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION,ExifInterface.ORIENTATION_NORMAL);の部分をコメントアウトして実行すると画像の向きは横向きのままだが、撮影できて画像もちゃんと保存できる。
###補足情報(言語/FW/ツール等のバージョンなど)
ツール : Android Studio2.3.3 compileSdkVersion 26 buildToolsVersion "26.0.0" minSdkVersion 15 targetSdkVersion 19
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/03 00:26
2017/07/03 02:56