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

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

ただいまの
回答率

87.78%

【Android】カメラ撮影した画像をギャラリーに反映するベストプラクティスは?

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 5,996

score 107

今、画像アップロード機能を持つAndroidアプリを開発しております。
その中で、カメラで撮影した画像を端末内に保存し、それをアップロードする処理があるのですが、普通にカメラで撮影した画像がギャラリーに自動反映されず、どのような実装ができるのか模索しています。

一応、現在は以下のようなコードでContentResolver#insertを叩いていて、ギャラリーへの反映はできています。

ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
contentValues.put(MediaStore.Images.Media.DATA, mCameraCaptureUri.getPath());
mCameraCaptureUri = getContentResolver()
    .insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);

また、以下の様な方法でもギャラリーに反映できる事まで確認済みです。

MediaScannerConnection.scanFile(
    getApplicationContext(),
    new String[] { mCameraCaptureUri.getPath() },
    new String[] { "image/jpeg" },
    null
);

ただ、なぜ上記のような記述が必要なのか、カメラで撮影した画像を自動で登録するところまでやってくれるようなオプション等がないのか探していますが、見つけられておりません。

上記の仕様について、ベストプラクティスや、どのような意図の元に自動反映されない仕様になっているのかなど、ご存知の事がありましたらご教授いただきたいです。

なお、カメラについては以下の様なコードでintentCameraを作成し、Android標準のカメラアプリを起動しています。

String photoName = dateTaken + ".jpg";
File saveDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
saveDir = new File(saveDir.getPath() + "/" + getString(R.string.image_dir_for_app));
File file = new File(saveDir.getPath(), photoName);
Log.d(TAG, "file.getPath(): " + file.getPath());
mCameraCaptureUri = Uri.fromFile(file);

Intent intentCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, mCameraCaptureUri);

よろしくお願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

ベストプラクティスかどうかは自信ないのですが、公式サイトのサンプルを紹介します。
https://developer.android.com/training/camera/photobasics.html

このページのAdd the Photo to a Galleryに掲載されているコードが下記になります。

private void galleryAddPic() {
    Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    File f = new File(mCurrentPhotoPath);
    Uri contentUri = Uri.fromFile(f);
    mediaScanIntent.setData(contentUri);
    this.sendBroadcast(mediaScanIntent);
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/06/28 15:46

    回答ありがとうございました。
    上記のプログラムで運用していますが、基本的に問題なく動いているようなので、ベストアンサーとさせていただきます。
    ただ1点だけ、カメラ機能で撮影した直後にギャラリーを表示するようなケースでは反映されない場合があり、その場合には自分が質問に書いた、ContentResolverへのinsert処理で対応する方法で対応するしかなさそうでした。

    キャンセル

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

  • ただいまの回答率 87.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

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