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

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

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

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

Android

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

Android Studio

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

解決済

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

sekaikan_ozaki
sekaikan_ozaki

総合スコア65

Java

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

Android

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

Android Studio

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

1回答

0評価

1クリップ

747閲覧

投稿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

package com.example.camera4; import android.Manifest; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Build; import android.os.Environment; import android.provider.MediaStore; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v4.content.FileProvider; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; import com.example.camera4.R; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class MainActivity extends AppCompatActivity { private final static int RESULT_CAMERA = 1001; private final static int REQUEST_PERMISSION = 1002; private ImageView imageView; private Uri cameraUri; private String filePath; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d("debug","onCreate()"); setContentView(R.layout.activity_main); imageView = findViewById(R.id.image_view); Button cameraButton = findViewById(R.id.camera_button); cameraButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Android 6, API 23以上でパーミッシンの確認 if (Build.VERSION.SDK_INT >= 23) { checkPermission(); } else { cameraIntent(); } } }); } private void cameraIntent(){ Log.d("debug","cameraIntent()"); // 保存先のフォルダーを作成するケース // File cameraFolder = new File( // Environment.getExternalStoragePublicDirectory( // Environment.DIRECTORY_PICTURES),"IMG"); // cameraFolder.mkdirs(); // 保存先のフォルダーをカメラに指定した場合 File cameraFolder = new File( Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_DCIM),"Camera"); // 保存ファイル名 String fileName = new SimpleDateFormat( "ddHHmmss", Locale.US).format(new Date()); filePath = String.format("%s/%s.jpg", cameraFolder.getPath(),fileName); Log.d("debug","filePath:"+filePath); // capture画像のファイルパス File cameraFile = new File(filePath); cameraUri = FileProvider.getUriForFile( MainActivity.this, getApplicationContext().getPackageName() + ".fileprovider", cameraFile); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, cameraUri); startActivityForResult(intent, RESULT_CAMERA); Log.d("debug","startActivityForResult()"); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == RESULT_CAMERA) { if(cameraUri != null){ imageView.setImageURI(cameraUri); registerDatabase(filePath); } else{ Log.d("debug","cameraUri == null"); } } } // アンドロイドのデータベースへ登録する private void registerDatabase(String file) { ContentValues contentValues = new ContentValues(); ContentResolver contentResolver = MainActivity.this.getContentResolver(); contentValues.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); contentValues.put("_data", file); contentResolver.insert( MediaStore.Images.Media.EXTERNAL_CONTENT_URI,contentValues); } // Runtime Permission check private void checkPermission(){ // 既に許可している if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED){ cameraIntent(); } // 拒否していた場合 else{ requestPermission(); } } // 許可を求める private void requestPermission() { if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_PERMISSION); } else { Toast toast = Toast.makeText(this, "許可されないとアプリが実行できません", Toast.LENGTH_SHORT); toast.show(); ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,}, REQUEST_PERMISSION); } } // 結果の受け取り @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { Log.d("debug","onRequestPermissionsResult()"); if (requestCode == REQUEST_PERMISSION) { // 使用が許可された if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { cameraIntent(); } else { // それでも拒否された時の対応 Toast toast = Toast.makeText(this, "これ以上なにもできません", Toast.LENGTH_SHORT); toast.show(); } } } }

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Java

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

Android

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

Android Studio

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