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

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

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

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

Android

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

Q&A

0回答

1057閲覧

カメラで撮影した画像のファイル名が別名で保存されてしまいます。

taka_tetu

総合スコア4

Java

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

Android

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

0グッド

0クリップ

投稿2019/11/23 18:54

編集2022/01/12 10:55

PCスペック
Windows10 64bit
メモリ 8GB
プロセッサ Intel Core i7
テスト用端末(京セラDIGNO  OS:7.1.1 )
Android Studio 3.5.1

現在、Androidのアプリを勉強を始めて2か月くらいです。
こちらのサイトを見てカメラアプリの作成をしています。
https://codezine.jp/article/detail/9913

上記サイトのコードをすべて入力しテスト用の端末で動作させるとカメラも起動し撮影もでき画像も保存されます。
ところが、保存される画像のファイル名が記載したコードのようになりません。

〇コード抜粋(ファイル名作成部分)
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
Date now = new Date(System.currentTimeMillis());
String nowStr = dateFormat.format(now);
String fileName = "UseCameraActivityPhoto_" + nowStr +".jpg";

本来であれば、2019年11月23日14:24:30の撮影であれば
「 UseCameraActivityPhoto_20191123142430.jpg 」
というファイル名で保存されるはずなのですが、
「 1574486664396.jpg 」
というようなコードというかシリアル値のような数値で保存されてしまいます。

アクティビティやレイアウトの名称もサンプルプロジェクトと同じにしたり
APIも15(サンプルが15だったので)から色々変えて入力しなおしたのですが解消されません。

何か見落としているのかもしれないのですが、今現在解決に至りません。
どなたか解決に向けたアドバイスがありましたらよろしくお願いします。

コード追記しました。

public void onCameraImageClick(View view) { if(ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE ) != PackageManager.PERMISSION_GRANTED) { String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE}; ActivityCompat.requestPermissions(this, permissions, 2000); return; } SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); Date now = new Date(System.currentTimeMillis()); String nowStr = dateFormat.format(now); String fileName = "UseCameraActivityPhoto_" + nowStr +".jpg"; ContentValues values = new ContentValues(); values.put(MediaStore.Images.Media.TITLE, fileName); values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); ContentResolver resolver = getContentResolver(); _imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, _imageUri); startActivityForResult(intent, 200); }

更に追記します

public class UseCameraActivity extends AppCompatActivity { private Uri _imageUri; @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode == 200 && resultCode == RESULT_OK) { ImageView ivCamera = (ImageView) findViewById(R.id.ivCamera); ivCamera.setImageURI(_imageUri); } } public void onCameraImageClick(View view) { 省略 }

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

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

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

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

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

jimbe

2019/11/23 19:28

ファイル名の生成箇所だけでなく, 保存のコードまでご提示ください. ファイル名の生成は出来ていても, それが使われていない場合もあります. コードは, 入力枠上部にある <code> を押すと出てくる ``` の間の "コード" を置き換える形で記入してください.
taka_tetu

2019/11/23 19:48

ファイル名の生成だけ記載して肝心の部分が抜けていました。大変失礼しました。
jimbe

2019/11/23 20:55

確認ですが, 参考にされているサイトでは, このコードでファイル名が指定したものになるとされているのでしょうか. (登録しないと全ては読めないようなので, 私は確認できません.)
taka_tetu

2019/11/24 02:25

サイトの解説ですが(原文を抜粋) ContentValuesオブジェクトにデータを格納するにはput()メソッドを使う。 put()メソッドを使い、画像のファイル名を指定している。 その際のキーは「MediaStore.Images.Media.TITLE」で値は画像のファイル名。 任意の文字列で良いが撮影のたびにファイル名がユニークになるように文字列(先に記載した4行のこと)を生成している。 となっていますのでファイル名になるものだと思っていました。
jimbe

2019/11/24 02:41

> _imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); > Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); > intent.putExtra(MediaStore.EXTRA_OUTPUT, _imageUri); ContentProvider 上では TITLE がファイル名になるようですが, カメラへ MediaStore.EXTRA_OUTPUT として渡している (ContentResolver.insert が返す URI ) _imageUri は, ContentProvider が管理するデータへのアクセス用 URI で, ファイル名は入っていなかったと思います. _imageUrl が TITLE に指定したファイル名になっているか, そしてなっていない場合に _imageUri と実際に生成されたファイル名が同じかを確認して頂けますか.
taka_tetu

2019/11/24 03:18

何度もお手数をおかけします。 studioのデバッガーで見ているのですが、 ファイル名 UseCameraActivityPhoto_20191124120944.jpg _imageUri Content/media/external/images/media/1607 picturesフォルダ 1574564955803.jpg といようになっています。
taka_tetu

2019/11/24 03:22

先の4行で上記ファイル名が生成され、_imageUriにはパスとIDでしょうか、が格納されていて、最終的に撮影画像がpicturesフォルダに数字のファイル名で画像が保存されています。
taka_tetu

2019/11/24 03:24

何度もすみません。 実機(京セラ602KC)を使ってデバッグして確認しました。
jimbe

2019/11/24 09:05

> ファイル名 UseCameraActivityPhoto_20191124120944.jpg > _imageUri Content/media/external/images/media/1607 > picturesフォルダ 1574564955803.jpg ということは, カメラが保存しているファイルはパス/ファイル名とも指定とは全く違うのですね. カメラ側への設定から調べる必要がありそうです.
taka_tetu

2019/11/24 10:14

はい、そのとおりで全く違います。試しに拡張子をjpegに変えてみましたが変化がないのでvalues以降にfileNameの内容が反映されていない感じがします。
jimbe

2019/11/24 10:22 編集

カメラを呼び出す際の保存ファイルの指定において, (空の)ファイルをあらかじめ作成しておく, カメラアプリによっては MediaStore.EXTRA_OUTPUT の指定を無視するかもしれない, onActivityResult のパラメータ Intent data から data.getExtras().get("data") で Bitmap が取れるのでそれを…等の記事が見受けられます. 一つ一つご確認して戴くのも大変なので, 参考にされている記事以外の「カメラアプリを作成する記事」を探して頂いて, コードを比べて試してみては如何でしょうか. 公式の [カメラアプリで写真を撮影する]( https://developer.android.com/training/camera/photobasics.html?hl=JA#TaskCaptureIntent ) にも(まとまっていませんが)コード例があります.
taka_tetu

2019/11/24 12:10

お手数をお掛けして申し訳ありませんでした。別のカメラアプリ作成を探してやってみます。 ちなみになのですが、 values.put(MediaStore.Images.Media.TITLE, fileName); values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); この2行あっても無くても保存されるファイル名に変化はありませんでした。(数字に変化はありますが) なので別コードのほうが良さそうだと思いました。
jimbe

2019/11/24 16:36

おそらく resolver.insert と保存ファイル名は直接関係無いと思います. ファイル名の指定は MediaStore.EXTRA_OUTPUT に渡す URI の指定のみが関係するのではないでしょうか. でも, 現状は(taka_tetuさんの指定したい名前ではありませんが) URI のようには保存されていませんでした. デバッガで見えた URI をパス/ファイル名として解釈した場合にどこにアクセスすることになるのかよく分かりませんが, もしかするとカメラアプリのほうで"指定されたファイルに書き込めない"からと仕方なく(?)テキトウな名前のファイルを生成したのかもしれません. …少々ムリヤリな推測ですけれど.
taka_tetu

2019/11/24 17:06

色々お手数おかけします。申し訳ありません。 >もしかするとカメラアプリのほうで~ 本当にそんな感じがします。よくわからない状況です。 このサイトの本があってそれも購入して読んでいるのですが、画像の保存先は定数があります。それがMediaStore.Images.Media.EXTERNAL_CONTENT_URI です。という内容です。 そのため動かしてどこに保存されるか確認しよう位の感じでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

アカウントをお持ちの方は

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問