Android 如何使用媒体商店从歌曲的uri获取歌曲的音乐详细信息

Android 如何使用媒体商店从歌曲的uri获取歌曲的音乐详细信息,android,arraylist,string-comparison,mediastore,Android,Arraylist,String Comparison,Mediastore,首先,我可以得到所有的歌曲和它的细节。我所要做的就是从URL中获取歌曲的详细信息,因为我可以从文件导航中获取唯一的URL。这就是我正在尝试的 public ArrayList<Songfileinfo> getPlayList(Context context, String uri) { { String sortOrder = null; try { String[] proj = {MediaStore.Audi

首先,我可以得到所有的歌曲和它的细节。我所要做的就是从URL中获取歌曲的详细信息,因为我可以从文件导航中获取唯一的URL。这就是我正在尝试的

 public ArrayList<Songfileinfo> getPlayList(Context context, String uri) {
    {

        String sortOrder = null;
        try {
            String[] proj = {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
            };

            String selection = null;

            String[] selectionArgs = {uri};


            Cursor audioCursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, proj, selection, selectionArgs, sortOrder);

            if (audioCursor != null) {
                if (audioCursor.moveToFirst()) {
                    do {
                        int audioTitle = audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE);
                        int audioartist = audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST);
                        int audioduration = audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION);
                        int audiodata = audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);
                        int audioalbum = audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM);
                        int audioalbumid = audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID);
                        int song_id = audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID);


                            Songfileinfo info = new Songfileinfo();
                            info.setFile_uri(audioCursor.getString(audiodata));
                            info.setTitle(audioCursor.getString(audioTitle));
                            info.setDuration((audioCursor.getString(audioduration)));
                            info.setArtist(audioCursor.getString(audioartist));
                            info.setAlbum(audioCursor.getString(audioalbum));
                            info.setId(audioCursor.getLong(song_id));
                            info.setAlbum_art((ContentUris.withAppendedId(albumArtUri, audioCursor.getLong(audioalbumid))).toString());
                            songList.add(info);


                    } while (audioCursor.moveToNext());
                }
            }
            assert audioCursor != null;
            audioCursor.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    return songList;
}
}
我尝试使用media metadata retriever类,但它不会给出图像url,而是在位图中,因为我的整个应用程序都在使用图像url,这对我来说很困难。

我给出这个类只是为了从url获取所有数据

  if (new File(audioCursor.getString(audiodata)).getName().equals(url.getName())) {


                            Songfileinfo info = new Songfileinfo();
                            info.setFile_uri(audioCursor.getString(audiodata));
                            info.setTitle(audioCursor.getString(audioTitle));
                            info.setDuration((audioCursor.getString(audioduration)));
                            info.setArtist(audioCursor.getString(audioartist));
                            info.setAlbum(audioCursor.getString(audioalbum));
                            info.setId(audioCursor.getLong(song_id));
                            info.setAlbum_art((ContentUris.withAppendedId(albumArtUri, audioCursor.getLong(audioalbumid))).toString());


                            songList.add(info);
                        }

我只是给出这个来获取url中的所有数据

  if (new File(audioCursor.getString(audiodata)).getName().equals(url.getName())) {


                            Songfileinfo info = new Songfileinfo();
                            info.setFile_uri(audioCursor.getString(audiodata));
                            info.setTitle(audioCursor.getString(audioTitle));
                            info.setDuration((audioCursor.getString(audioduration)));
                            info.setArtist(audioCursor.getString(audioartist));
                            info.setAlbum(audioCursor.getString(audioalbum));
                            info.setId(audioCursor.getLong(song_id));
                            info.setAlbum_art((ContentUris.withAppendedId(albumArtUri, audioCursor.getLong(audioalbumid))).toString());


                            songList.add(info);
                        }

哪种格式的文件?MP3,MP4,FLV。或者你想创建一个通用的方法吗?我把uri转换成字符串,这样它会比较所有的格式,大部分都是奥迪歌曲。我有一个方法,通过它我可以得到所有的歌曲。但是我想得到我正在传递的歌曲的详细信息文件位置你在你的项目中使用的是哪个版本的SDK,你能在你的帖子中添加这些信息吗?所以我可以给你一个答案。这不是问题,兄弟,但是为了方便你,它的sdk版本是25,哪种格式的文件?MP3,MP4,FLV。或者你想创建一个通用的方法吗?我把uri转换成字符串,这样它会比较所有的格式,大部分都是奥迪歌曲。我有一个方法,通过它我可以得到所有的歌曲。但是我想得到我正在传递的歌曲的详细信息文件位置你在你的项目中使用的是哪个版本的SDK,你能在你的帖子中添加这些信息吗?所以我可以给你一个答案。这不是问题,兄弟,但是为了方便你,它的sdk版本是25