Ole*_*ych 5 audio android download mediastore mime-types
我正在编写用于下载和存储不同类型的 MediaStore 文件的代码。对于运行 Android 10 及更高版本的设备,我将它们全部存储到Downloads集合中,并且工作正常。运行 Android 10 以下的用户没有此集合。一开始我尝试将它们存储到Files集合中,但事实证明不可能将例如图像存储到Files集合中。所以我来到了这段代码:
fun createDownloadsFile(context: Context, fileName: String, mimeType: String): Uri? {
val values = ContentValues().apply {
put(MediaStore.MediaColumns.DISPLAY_NAME, fileName)
put(MediaStore.MediaColumns.MIME_TYPE, mimeType)
}
val collection = if (hasAndroid10()) {
values.put(MediaStore.MediaColumns.IS_PENDING, 1)
MediaStore.Downloads.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)
} else getMediaStoreCollectionBelowAndroid10(mimeType)
return context.contentResolver.insert(collection, values)
}
private fun getMediaStoreCollectionBelowAndroid10(mimeType: String): Uri = when {
mimeType.startsWith("image/") -> MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL)
mimeType.startsWith("audio/") -> MediaStore.Audio.Media.getContentUri(MediaStore.VOLUME_EXTERNAL)
mimeType.startsWith("video/") -> MediaStore.Video.Media.getContentUri(MediaStore.VOLUME_EXTERNAL)
else -> MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL)
}
Run Code Online (Sandbox Code Playgroud)
现在,图像和视频在低于 10 的 Android 上可以正常存储。但尝试存储音频时会崩溃contentResolver.insert(collection, values):
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.lastIndexOf(int)' on a null对象引用
尝试在同一行上存储与图像、视频和音频不同类型的文件会崩溃: java.lang.IllegalArgumentException:插入新文件时未提供路径
我将不胜感激任何帮助!
| 归档时间: |
|
| 查看次数: |
1592 次 |
| 最近记录: |