【Kotlin】カメラを起動して撮影した写真を表示する

カメラを起動するには、インテントACTION_IMAGE_CAPTUREを使用します。

写真を撮影すると、指定した外部ストレージのパスに写真が保存されるようにしています。

外部ストレージへの保存権限をマニフェストに記載しておきます。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

パスをもとにImageViewでURIを指定し、表示するようにしています。

なお、外部ストレージに一度写真を保存しないと、ImageViewにサムネイル表示(低解像度)となってしまいますのでご注意を。

    //写真のパスを入れる
    private var _imageUri:Uri? = null

    //コールバックを設定
    private val takePhotoLauncher = registerForActivityResult(
        ActivityResultContracts.StartActivityForResult()
    ) { result ->
        Log.d("registerForActivity", result.toString())
        if (result.resultCode == RESULT_OK) {
            //イメージビューに画像をセット
            imageView?.setImageURI(_imageUri)
        }
    }

    private fun dispatchTakePictureIntent() {

        //ファイル名を作る
        val dateFormat = SimpleDateFormat("yyyyMMddHHmmss")
        val now = Date()

        val nowStr = dateFormat.format(now)

        val fileName = "${nowStr}.jpg"

        val values = ContentValues()
        values.put(MediaStore.Images.Media.TITLE,fileName)
        values.put(MediaStore.Images.Media.MIME_TYPE,"image/jpeg")

        //外部ストレージのURIを生成する
        _imageUri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values)

        val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
        intent.putExtra(MediaStore.EXTRA_OUTPUT,_imageUri)

        takePhotoLauncher.launch(intent)
    }

 

ABOUTこの記事をかいた人

個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog