Android 使用Mediastore API保存音频文件会在API 28上引发RemoteException-
我没有找到任何官方文档来解释如何使用MediaStore API将音频文件保存在外部存储器上。 在API 29+上,一切正常。在API 28上-我得到以下错误:Android 使用Mediastore API保存音频文件会在API 28上引发RemoteException-,android,audio,mediastore,Android,Audio,Mediastore,我没有找到任何官方文档来解释如何使用MediaStore API将音频文件保存在外部存储器上。 在API 29+上,一切正常。在API 28上-我得到以下错误: E/JavaBinder: *** Uncaught remote exception! (Exceptions are not yet supported across processes.) java.lang.StringIndexOutOfBoundsException: String index out of range:
E/JavaBinder: *** Uncaught remote exception! (Exceptions are not yet supported across processes.)
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:2036)
at com.android.providers.media.MediaProvider.insertFile(MediaProvider.java:2188)
at com.android.providers.media.MediaProvider.insertInternal(MediaProvider.java:2592)
at com.android.providers.media.MediaProvider.insert(MediaProvider.java:1872)
at android.content.ContentProvider$Transport.insert(ContentProvider.java:266)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:152)
at android.os.Binder.execTransact(Binder.java:731)
这是我使用的代码(当我调用“insert”时,我得到一个空Uri):
编辑
我也尝试过这样做,但在插入时总是会得到一个空Uri:
val newAudioFileDetails = ContentValues().apply {
put(MediaStore.Audio.Media.DISPLAY_NAME, name)
put(MediaStore.Audio.Media.IS_PENDING, 1)
if (VERSION.SDK_INT < VERSION_CODES.Q) {
val audioDir = File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_MUSIC), "MyNewAlbumName")
val audioPath = File(audioDir, "$name.mp3").absolutePath
put(MediaStore.Audio.AudioColumns.DATA, audioPath)
}
val newAudioFileDetails=ContentValues()。应用{
put(MediaStore.Audio.Media.DISPLAY_NAME,NAME)
put(MediaStore.Audio.Media.IS_挂起,1)
if(VERSION.SDK\u INT
您有一个StringIndexOutOfBoundsException
...Media.DATA,“数据”
?应该是什么?您必须提供路径。我必须提供什么路径?ContentResolver类引发StringIndexOutOfBoundsException:我只是在返回文件应保存的路径中获得一个空Uri。目录的完整路径。或文件的完整路径。请两者都尝试。
val newAudioFileDetails = ContentValues().apply {
put(MediaStore.Audio.Media.DISPLAY_NAME, name)
put(MediaStore.Audio.Media.IS_PENDING, 1)
if (VERSION.SDK_INT < VERSION_CODES.Q) {
val audioDir = File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_MUSIC), "MyNewAlbumName")
val audioPath = File(audioDir, "$name.mp3").absolutePath
put(MediaStore.Audio.AudioColumns.DATA, audioPath)
}