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

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

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

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

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

Q&A

解決済

1回答

2883閲覧

Android Studio カメラを起動し、撮影した画像を画面内に表示したい

sekaikan_ozaki

総合スコア65

Java

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

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

0グッド

1クリップ

投稿2019/05/29 06:35

PCスペック
Windows7 64bit
メモリ 8GB
プロセッサ Intel Core i7-3610

デモ用端末(XPERIA OS:7.0 API 24)
Android Studio 3.4

Android Studioにて、カメラを起動し、撮影した画像を画面内に表示するアプリを開発しています。

https://akira-watson.com/android/camera-intent.html/2
こちらのサイトの通りに、コードを用意しました。
実機でアプリを立ち上げ、[BUTTON]を押してカメラを開き、画像の撮影までは上手くいったのですが、
なぜか画面に写真が表示されず、アルバムにも写真が保存されていないことがわかりました。

java

1package com.example.camera4; 2 3import android.Manifest; 4import android.content.ContentResolver; 5import android.content.ContentValues; 6import android.content.Intent; 7import android.content.pm.PackageManager; 8import android.net.Uri; 9import android.os.Build; 10import android.os.Environment; 11import android.provider.MediaStore; 12import android.support.annotation.NonNull; 13import android.support.v4.app.ActivityCompat; 14import android.support.v4.content.FileProvider; 15import android.support.v7.app.AppCompatActivity; 16import android.os.Bundle; 17import android.util.Log; 18import android.view.View; 19import android.widget.Button; 20import android.widget.ImageView; 21import android.widget.Toast; 22 23import com.example.camera4.R; 24 25import java.io.File; 26import java.text.SimpleDateFormat; 27import java.util.Date; 28import java.util.Locale; 29 30public class MainActivity extends AppCompatActivity { 31 32 private final static int RESULT_CAMERA = 1001; 33 private final static int REQUEST_PERMISSION = 1002; 34 35 private ImageView imageView; 36 private Uri cameraUri; 37 private String filePath; 38 39 @Override 40 protected void onCreate(Bundle savedInstanceState) { 41 super.onCreate(savedInstanceState); 42 Log.d("debug","onCreate()"); 43 setContentView(R.layout.activity_main); 44 45 imageView = findViewById(R.id.image_view); 46 47 Button cameraButton = findViewById(R.id.camera_button); 48 cameraButton.setOnClickListener(new View.OnClickListener() { 49 @Override 50 public void onClick(View v) { 51 // Android 6, API 23以上でパーミッシンの確認 52 if (Build.VERSION.SDK_INT >= 23) { 53 checkPermission(); 54 } 55 else { 56 cameraIntent(); 57 } 58 } 59 }); 60 } 61 62 private void cameraIntent(){ 63 Log.d("debug","cameraIntent()"); 64 65 // 保存先のフォルダーを作成するケース 66// File cameraFolder = new File( 67// Environment.getExternalStoragePublicDirectory( 68// Environment.DIRECTORY_PICTURES),"IMG"); 69// cameraFolder.mkdirs(); 70 71 // 保存先のフォルダーをカメラに指定した場合 72 File cameraFolder = new File( 73 Environment.getExternalStoragePublicDirectory( 74 Environment.DIRECTORY_DCIM),"Camera"); 75 76 77 // 保存ファイル名 78 String fileName = new SimpleDateFormat( 79 "ddHHmmss", Locale.US).format(new Date()); 80 filePath = String.format("%s/%s.jpg", cameraFolder.getPath(),fileName); 81 Log.d("debug","filePath:"+filePath); 82 83 // capture画像のファイルパス 84 File cameraFile = new File(filePath); 85 cameraUri = FileProvider.getUriForFile( 86 MainActivity.this, 87 getApplicationContext().getPackageName() + ".fileprovider", 88 cameraFile); 89 90 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 91 intent.putExtra(MediaStore.EXTRA_OUTPUT, cameraUri); 92 startActivityForResult(intent, RESULT_CAMERA); 93 94 Log.d("debug","startActivityForResult()"); 95 } 96 97 @Override 98 protected void onActivityResult(int requestCode, 99 int resultCode, Intent intent) { 100 if (requestCode == RESULT_CAMERA) { 101 102 if(cameraUri != null){ 103 imageView.setImageURI(cameraUri); 104 105 registerDatabase(filePath); 106 } 107 else{ 108 Log.d("debug","cameraUri == null"); 109 } 110 } 111 } 112 113 // アンドロイドのデータベースへ登録する 114 private void registerDatabase(String file) { 115 ContentValues contentValues = new ContentValues(); 116 ContentResolver contentResolver = MainActivity.this.getContentResolver(); 117 contentValues.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); 118 contentValues.put("_data", file); 119 contentResolver.insert( 120 MediaStore.Images.Media.EXTERNAL_CONTENT_URI,contentValues); 121 } 122 123 // Runtime Permission check 124 private void checkPermission(){ 125 // 既に許可している 126 if (ActivityCompat.checkSelfPermission(this, 127 Manifest.permission.WRITE_EXTERNAL_STORAGE) == 128 PackageManager.PERMISSION_GRANTED){ 129 cameraIntent(); 130 } 131 // 拒否していた場合 132 else{ 133 requestPermission(); 134 } 135 } 136 137 // 許可を求める 138 private void requestPermission() { 139 if (ActivityCompat.shouldShowRequestPermissionRationale(this, 140 Manifest.permission.WRITE_EXTERNAL_STORAGE)) { 141 ActivityCompat.requestPermissions(MainActivity.this, 142 new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 143 REQUEST_PERMISSION); 144 145 } else { 146 Toast toast = Toast.makeText(this, 147 "許可されないとアプリが実行できません", 148 Toast.LENGTH_SHORT); 149 toast.show(); 150 151 ActivityCompat.requestPermissions(this, 152 new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,}, 153 REQUEST_PERMISSION); 154 155 } 156 } 157 158 // 結果の受け取り 159 @Override 160 public void onRequestPermissionsResult(int requestCode, 161 @NonNull String[] permissions, 162 @NonNull int[] grantResults) { 163 164 Log.d("debug","onRequestPermissionsResult()"); 165 166 if (requestCode == REQUEST_PERMISSION) { 167 // 使用が許可された 168 if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 169 cameraIntent(); 170 171 } else { 172 // それでも拒否された時の対応 173 Toast toast = Toast.makeText(this, 174 "これ以上なにもできません", Toast.LENGTH_SHORT); 175 toast.show(); 176 } 177 } 178 } 179 180}

ソースコードはこちらですが、写真が表示されない原因はどこにあるのでしょうか。
保存ファイルの作成とデータベースへの登録等がうまくいってないのでしょうか?

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

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

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

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

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

keicha_hrs

2019/05/29 14:11

activity_main.xml、strings.xml、provider_paths.xml、AndroidManifest.xmlの編集までも正確に写したのでしょうか?手元で試したところ、正常に動作するようです。何か作業ミスがあるものと思いますが、今提示されている情報ではわかりません。
keicha_hrs

2019/05/29 14:17 編集

import com.example.camera4.R; この一行が気になりますが、これはサンプルにはないimport文ですね。この行は灰色行になっていますか?着色されていますか?
sekaikan_ozaki

2019/05/30 00:17

コメントありがとうございます。 activity_main.xml、strings.xml、provider_paths.xml、AndroidManifest.xmlもすべて正確に写した上での質問でした。 import com.example.camera4.R;に関しては、灰色行になっています。 そもそも、その行が存在したことに今気づきました・・ コピペしたはずなのに、なぜか現れていましたね。。。
aja

2019/05/31 05:04

>保存ファイルの作成とデータベースへの登録等がうまくいってないのでしょうか? Logcatなどのログやデバッグを使ってどこまで進んでいて、どこで止まっているのかなどを調べてみましょう。provider_paths.xmlの置き場所などは大丈夫でしょうか,etc.
sekaikan_ozaki

2019/05/31 06:31 編集

コメントありがとうございます。 >Logcatなどのログやデバッグを使ってどこまで進んでいて、どこで止まっているのかなどを調べてみましょう。 わかりました、調べてやってみます >provider_paths.xmlの置き場所などは大丈夫でしょうか はい、app/resの下にxmlのディレクトリを作成し、その中に、provider_paths.xmlを入れています。スペルミスもないです。
keicha_hrs

2019/05/31 12:22

一応の確認なのですが、provider_paths.xmlのファイル名に間違いはないですね?参考サイトの方が、ファイル名の誤表記をしていますので(provide_paths.xmlになっている。providerの末尾のrが抜けている。)。もし、ファイル名を誤っていたら、それを参照しているAndroidManifest.xmlで当該箇所が赤字で表示されているでしょう。
sekaikan_ozaki

2019/06/03 00:12

コメントありがとうございます。 ファイル名に語表記はありません。 AndroidManifest.xmlも赤字のエラーはまったくありません
keicha_hrs

2019/06/03 13:46

新たに撮影して表示した画像の加工についての質問を立てられていますが、本件は解決したのでしょうか?解決したのならば、自己解決として質問を閉じていただけないでしょうか。
sekaikan_ozaki

2019/06/03 13:55

失礼しました。 今ソースコードが手元にないので、明日の自己回答となります
guest

回答1

0

自己解決

cameraIntent()メソッド内の、
// 保存先のフォルダーを作成するケース
File cameraFolder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"IMG");
cameraFolder.mkdirs();

// 保存先のフォルダーをカメラに指定した場合 //File cameraFolder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM),"Camera");

いままで「// 保存先のフォルダーをカメラに指定した場合」を選択していて、保存ができなかったが、「// 保存先のフォルダーを作成するケース」に変えたところ、画像が表示され、ギャラリーにも撮影した画像が保存された

投稿2019/06/04 00:06

sekaikan_ozaki

総合スコア65

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問