質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

572閲覧

Android : カメラアプリで撮影したら、アプリが落ちてしまう。

pira

総合スコア15

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2017/06/30 02:02

###カメラで撮影した後、画像を保存したい。
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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

その処理の時点でファイルは存在しないので、Exifを読み取れないんじゃないでしょうか。

投稿2017/06/30 02:19

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pira

2017/07/03 00:26

返答が遅くなって申し訳ありません。 ExifInterface exif = new ExifInterface(f.getPath());の前に画像ファイルを保存すればいけるということですね!ちょっとやってみます!ありがとうございます!
pira

2017/07/03 02:56

無事、解決することができました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問