![](/img/trans.png)
[英]how to save a output wav file from tts to internal storage, using the below code I am to save it in external storage
[英]How to save file to external storage from link using Mediastore
我有一个带有 filePath 的音频 class (它是指向 AWS S3 文件的音频文件的链接)。 这是我的 function
fun download(audio: Audio) {
val audioOutStream: OutputStream
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
val values = ContentValues()
values.put(MediaStore.Audio.Media.DISPLAY_NAME, "${audio.title}.mp3")
values.put(MediaStore.Audio.Media.MIME_TYPE, "audio/mpeg")
values.put(
MediaStore.Audio.Media.RELATIVE_PATH,
"${Environment.DIRECTORY_MUSIC}/Soundy/"
)
val uri = context.contentResolver.insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values)
audioOutStream = context.contentResolver.openOutputStream(uri!!)!!
} else {
val audioPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).toString() + "/Soundy/"
val audio = File(audioPath, audio.title!!)
audioOutStream = FileOutputStream(audio)
}
audioOutStream.close()
}
它保存音频,但该文件不包含任何内容(它是 0 字节)。 如何使用 Mediastore 从 Url 保存文件? 我的 android 版本是 11。
编辑将我的代码更改为:
fun download(audio: Audio) {
val values = ContentValues()
values.put(MediaStore.Audio.Media.DISPLAY_NAME, "${audio.title}.mp3")
values.put(MediaStore.Audio.Media.MIME_TYPE, "audio/mpeg")
values.put(
MediaStore.Audio.Media.RELATIVE_PATH,
"${Environment.DIRECTORY_MUSIC}/Soundy/"
)
val uri = context.contentResolver.insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values)
val audioOutStream = context.contentResolver.openOutputStream(uri!!)!!
val request = Request.Builder().url(audio.filePath).build()
val response = OkHttpClient().newCall(request).execute()
val sink = Okio.buffer(Okio.sink(audioOutStream))
sink.writeAll(response.body()!!.source())
sink.close()
audioOutStream.close()
}
仍然无法正常工作。
那是因为您不使用audioOutStream
做任何事情,除了关闭它。 如果你想写点什么,你就需要写点什么。 例如,您可以使用 OkHttp 下载内容并将其写出来。 虽然该示例显示了写入File
,但 Okio 还在OutputStream
上提供了一个sink()
扩展 function 供您使用。
换句话说,回到你的原始代码,你会得到这样的东西:
fun download(audio: Audio) {
val audioOutStream: OutputStream
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
val values = ContentValues()
values.put(MediaStore.Audio.Media.DISPLAY_NAME, "${audio.title}.mp3")
values.put(MediaStore.Audio.Media.MIME_TYPE, "audio/mpeg")
values.put(
MediaStore.Audio.Media.RELATIVE_PATH,
"${Environment.DIRECTORY_MUSIC}/Soundy/"
)
val uri = context.contentResolver.insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values)
audioOutStream = context.contentResolver.openOutputStream(uri!!)!!
} else {
val audioPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).toString() + "/Soundy/"
val audio = File(audioPath, audio.title!!)
audioOutStream = FileOutputStream(audio)
}
val request = Request.Builder().url(audio.filePath).build()
val response = OkHttpClient().newCall(request).execute()
val sink: BufferedSink = audioOutStream.sink().buffer()
sink.writeAll(response.body()!!.source())
sink.close()
audioOutStream.close()
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.