在Android 10及更高版本上,getAbsolutePath()方法无法访问非应用内部存储的文件,因此需要使用MediaStore API。可以使用以下代码示例:
//获得属于MediaStore音频媒体的uri。 Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
//创建查询,指定uri并请求音频文件名 Cursor cursor = getContentResolver().query(uri, null, null, null, MediaStore.Audio.Media.DISPLAY_NAME + " ASC");
if(cursor != null){ while(cursor.moveToNext()){ //获取音频id int id = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media._ID)); //获取音频文件名 String name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME)); //获取音频文件路径 String path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.RELATIVE_PATH)); if (path == null) { path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)); } //do something with the audio file data } cursor.close(); }
使用该方法,我们可以访问非应用私有目录中的音频文件,而不需要使用Deprecated的Mediastore.Audio.Media.DATA。