やりたいこと
表題の通りですが、自作のカメラアプリで録画した動画ファイルを直接ギャラリーに保存できるようにしたいです。
つまり、以下の「やったこと」で記載している「setOutputFile」のパスとして、ギャラリーのパスを直接指定したいです。
ここで言うギャラリーとは、端末既存のカメラアプリで撮影したデータが保存されるデフォルトのフォルダのことを指します。
やったこと
現在、以下のコードでパスを取得し、アプリ独自の外部ストレージを指定して動画を保存することはできています。
kotlin
1// ビデオの出力ファイルパスを設定 2 private fun getVideoFilePath(context: Context?): String { 3 Log.i("録画", "ファイルパス設定") 4 val filename = "${System.currentTimeMillis()}.mp4" // 録画ファイル名を保存する際の時間にする 5 val dir = context?.getExternalFilesDir(null) // アプリ独自のパスを取得 6 return if (dir == null) { 7 filename 8 } else { 9 "${dir.absolutePath}/$filename" // 取得したパスにファイル名を繋げて指定 10 } 11 }
そして、取得したパスをMediaRecorderのsetOutputFileに渡して、ファイルの出力先として設定しています。
kotlin
1setOutputFile(nextVideoAbsolutePath) // 出力ファイルパスを設定
また、サイトを参考に、現在以下のように実装をしているのですが、エラーが発生してしまっております。
kotlin
1 // ギャラリーにデータを保存する 2 private fun saveFile(f: File) { 3 Log.i("録画", "ギャラリー保存準備") 4 val stream = FileOutputStream(f) 5 stream.close() 6 Log.i("録画", "ギャラリー保存設定") 7 val contentValues = ContentValues().apply { 8 put(MediaStore.Video.Media.MIME_TYPE, "video/mp4") 9 put("_data", f.absolutePath) 10 } 11 Log.i("録画", "ギャラリー保存開始") 12 ContentResolver.insert( 13 MediaStore.Video.Media.EXTERNAL_CONTENT_URI, contentValues) 14 }
エラー内容
Importを追記することを促されますが、提案通りにImportを選択しても何も改善されず、エラー(文字が赤くなっている)状態。
わからないこと
動画の保存先としてギャラリーを指定する方法と、ギャラリーのパスを取得する方法がわかりません。
調査すると、画像ファイルをギャラリーにコピーする方法などは見受けられましたが、動画ファイルをコピーしている例は見当たらず苦戦しています。
そもそも、ギャラリーにデータをコピーするといった周りくどい方法ではなく、ギャラリーのパスを指定する構文か何かで簡単にパスを指定できないものなのでしょうか。
以下の参考サイトをもとに実装を試みているのですが、うまくいっていない状態です。
また、エラーの内容ですが、lateinitに何を入れるべきなのかが分からず、このようなエラーが出てしまっています。
ですが、以下の記載を無くしてしまうと、存在しないプロパティとしてエラーが発生してしまいます。
kotlin
1lateinit var contentResolver: ContentResolver
引き続き調査と検証を続けますが、解決法をご存知の方がいらっしゃいましたらご教授いただけますと幸いです。
参考にしたサイト
note - ScopedStorageを使った例
Qiita - 画像をギャラリーに表示させる例
Storage Access Frameworkの活用例
Android developers - 共有ストレージからメディア ファイルにアクセスする
teratail - 画像をギャラリーに反映する方法
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。