Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MediaStore音频列数据已弃用_Java_Android_Android Studio_Audio_Mediastore - Fatal编程技术网

Java MediaStore音频列数据已弃用

Java MediaStore音频列数据已弃用,java,android,android-studio,audio,mediastore,Java,Android,Android Studio,Audio,Mediastore,大家好,我正在尝试获取androidapi level 29中音频文件的绝对路径,即Q,但问题是数据已弃用,因此如何解决此问题,以及如何使用绝对路径(e.x:storage/sdcard/music.mp3)我们可以将嵌入的图片添加到音频中,但在内容uri(内容://)中,我们可以使用\u ID列通过附加文件的ID来获得。但是如果我们无法获得绝对路径,那么如何使用内容://uri播放音频文件? 我之前使用的代码是: public ArrayList<Song> FolderFiles

大家好,我正在尝试获取android
api level 29中音频文件的绝对路径,即Q
,但问题是数据
已弃用
,因此如何解决此问题,以及如何使用
绝对路径(e.x:storage/sdcard/music.mp3)
我们可以将嵌入的图片添加到音频中,但在内容uri(
内容://
)中,我们可以使用
\u ID列
通过附加文件的ID来获得。但是如果我们无法获得绝对路径,那么如何使用
内容://
uri播放音频文件? 我之前使用的代码是:

public ArrayList<Song> FolderFilesList(Context context, String FolderPath) {
      //folder-exclude-sub-folders

        ArrayList<Song> songs = new ArrayList<>();

  String[] columns = {
            MediaStore.Audio.Media._ID,
            MediaStore.Audio.Media.TITLE,
            MediaStore.Audio.Media.ARTIST,
            MediaStore.Audio.Media.DURATION,
            MediaStore.Audio.Media.DATA,
            MediaStore.Audio.Media.ALBUM,
            MediaStore.Audio.Media.ALBUM_ID,
            MediaStore.Audio.Media.TRACK,
            MediaStore.Audio.Media.ARTIST_ID,
            MediaStore.Audio.Media.DISPLAY_NAME,

    };


        String selection = MediaStore.Audio.Media.DATA + " LIKE ?      AND " + MediaStore.Audio.Media.DATA + " NOT LIKE ? ";
        String[] selectionArgs = new String[]{
                "%" + FolderPath + "%",
                "%" + FolderPath + "/%/%"
        };

        Cursor cursor =  context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                columns(), selection, selectionArgs, null);
        if (cursor.moveToFirst()) {
            do {
                Song song = new Song(
                         cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media._ID)),
                        cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)),
                        cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM)),
                        cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID)),
                        cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)),
                        cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST_ID)),
                        cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)),
                        cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.TRACK)),
                        cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION))
                );

                //File f = new File(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)));
                // if (f.isFile() && f.exists()) {
                songs.add(song);
                //}
            } while (cursor.moveToNext());
        }
        if (cursor != null) {
            cursor.close();
        }
        return songs;
    }
public ArrayList FolderFilesList(上下文上下文,字符串FolderPath){
//文件夹排除子文件夹
ArrayList歌曲=新建ArrayList();
字符串[]列={
MediaStore.Audio.Media.\u ID,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.DURATION,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.ALBUM\u ID,
MediaStore.Audio.Media.TRACK,
MediaStore.Audio.Media.ARTIST_ID,
MediaStore.Audio.Media.DISPLAY\u名称,
};
字符串选择=MediaStore.Audio.Media.DATA+“喜欢”和“+MediaStore.Audio.Media.DATA+”不喜欢?”;
字符串[]selectionArgs=新字符串[]{
“%”+文件夹路径+“%”,
“%”文件夹路径+“/%/%”
};
Cursor Cursor=context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL\u CONTENT\u URI,
columns(),selection,selectionArgs,null);
if(cursor.moveToFirst()){
做{
新歌(
cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.u ID)),
cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)),
cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM)),
cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID)),
cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)),
cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST_ID)),
cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)),
cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.TRACK)),
getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION))
);
//文件f=新文件(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
//如果(f.isFile()&&f.exists()){
歌曲。添加(歌曲);
//}
}while(cursor.moveToNext());
}
如果(光标!=null){
cursor.close();
}
返回歌曲;
}

您现在无法获取绝对路径,但您可以获取内容uri,并使用该内容uri的意思(
内容://
),然后使用以下代码在包文件夹的缓存目录中写入文件:

String filePath = new File(resolver.openFileDescriptor(contentUri, "r");

然后使用InputStream和OutputStream将其存储在缓存目录中,并将此文件路径用作文件。

但如果我们无法获得绝对路径,那么如何解决此问题。是的,你无法获得Q下的绝对路径。而且不清楚你想要解决什么问题。因此,如何使用MediaPlayer在android Q中播放音频文件,请给出任何解决方案。android开发者网站说使用openFileDescriptor,但我不明白如何做到这一点。@blackapps,你又来了,没有解决方案或指针。