【Android】画像保存の際、カメラからの画像か保存されている画像かを選ばせる方法
仕事の方が忙しく、全く書けていませんでした。。
最近は、色々と落ち着いてきて、またアプリ開発の方に着手ができてきました。
先日、MyReviewの機能追加を行いました。 MyReviewは、自身で好きなもののレビュー記録を付けることができるアプリです。 レビュー記録を作成する際、画像を一緒に付けることができます。
以前はカメラの機能が使えなかったのですが、使えるようにしました!
・カメラを起動させて撮影した画像を保存
・予め保存している画像を保存
どちらかを選ばせる様な挙動にしています。
こんな感じです。(画質が粗いですが、アプリ上は問題ありません。)
流れとしては、以下のイメージです。
- ギャラリーからのIntentを生成
- カメラ起動のIntentを生成
- createChooserメソッドに1と2を渡し、1と2を選ばせる画面を表示
今回はKotlinで書きました。
まずは、Intentの生成
// ギャラリー、カメラのIntentを入れるList val targets: MutableList<Intent> = mutableListOf() // ギャラリーのIntent val intent = Intent(Intent.ACTION_GET_CONTENT) intent.type = "image/*" targets.add(intent) // カメラのIntent val intent2 = Intent(MediaStore.ACTION_IMAGE_CAPTURE).apply { addCategory(Intent.CATEGORY_DEFAULT) putExtra(MediaStore.EXTRA_OUTPUT, createSaveFileUri()) } // ギャラリーとカメラのIntentをListに追加 targets.add(intent2) val chooserIntent = Intent.createChooser(Intent(), "選択して下さい").apply { putExtra(Intent.EXTRA_INITIAL_INTENTS, targets.toTypedArray()) } startActivityForResult(chooserIntent, requestCode)
画像が選ばれた後のコールバック処理
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { if (resultCode == Activity.RESULT_OK) { // ここの中で受け取った画像に対して処理する } }
では〜🐶