如何从当前播放的歌曲中获取歌曲ID,专辑ID和艺术家ID

时间:2017-06-23 13:03:10

标签: android

我正在开发我的应用程序,我想在其中获取在任何媒体应用程序上播放的歌曲的详细信息。 我目前没有收到Google Play音乐应用的数据,而是播放歌曲ID,艺术家ID,专辑ID等歌曲详情。

我试过下面的代码:

IntentFilter intentFilter=new IntentFilter();

        intentFilter.addAction("com.android.music.metachanged");
        intentFilter.addAction("com.android.music.playstatechanged");
        intentFilter.addAction("com.android.music.playbackcomplete");
        intentFilter.addAction("com.android.music.queuechanged");
        intentFilter.addAction("com.samsung.sec.android.MusicPlayer.metachanged");
        intentFilter.addAction("com.spotify.music.playbackstatechanged");
        intentFilter.addAction("com.spotify.music.metadatachanged");
        intentFilter.addAction("com.apple.android.music.metachanged");
        intentFilter.addAction("com.apple.android.music.playstatechanged");
        intentFilter.addAction("com.rdio.android.metachanged");
        intentFilter.addAction("com.rdio.android.playstatechanged");

        //register the intentfilters into the reciever
        registerReceiver(mReceiver,intentFilter);

这是我的收件人:

    BroadcastReceiver mReceiver=new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, final Intent intent) {
            String action = intent.getAction();
            //Bundle bundle=intent.getExtras();

            String cmd = intent.getStringExtra("command");
            Log.v("tag ", action + " / " + cmd);

            //not getting the song id in the google play music and album_id and artist id in both
            final String song_id=String.valueOf(intent.getLongExtra("id", 0));
            final String album_id= String.valueOf(intent.getLongExtra("album_id",0));
            final String artist_id= String.valueOf(intent.getLongExtra(MediaStore.Audio.Artists._ID,0));
            final String title=intent.getStringExtra("track");
            final String playlist_id= String.valueOf(intent.getLongExtra(MediaStore.Audio.Playlists._ID,0));
            final String playlist_name=intent.getStringExtra(MediaStore.Audio.Playlists.NAME);
            final String artist=intent.getStringExtra(MediaStore.Audio.AudioColumns.ARTIST);
            final String album=intent.getStringExtra(MediaStore.Audio.AudioColumns.ALBUM);
        }
    };

在默认播放器中获取歌曲详细信息,但不在谷歌播放音乐中。

4 个答案:

答案 0 :(得分:1)

由于其他答案只是有点正确但不完全在这里是该问题的实际答案:PlayMusic拥有您可以查询的自己的内容提供商。

这是一个工作示例(trackId是意图的SongId额外):

{{1}}

答案 1 :(得分:0)

要获取歌曲ID,艺术家ID和专辑ID,您应该使用此方法。从那以后你可以得到它。

       ContentResolver contentResolver = getActivity().getContentResolver();

        Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        String selection = MediaStore.Audio.Media.IS_MUSIC + "!= 0";
        String sortOrder = MediaStore.Audio.Media.TITLE + " ASC";
        Cursor cursor = contentResolver.query(uri, null, selection, null, sortOrder);

        if (cursor != null && cursor.getCount() > 0) {
            audioList = new ArrayList<>();
            while (cursor.moveToNext()) {
                String data  = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
                String title = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
                String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
                String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
                String album_id = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
                Long albumid = Long.parseLong(album_id);
                Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");
                Uri finaluri = ContentUris.withAppendedId(sArtworkUri, albumid);
                String path = FileUtils.getPath(getContext(), finaluri);
                //Bitmap artwork = BitmapFactory.decodeStream(in);

                // Save to audioList
                audioList.add(new Audio(data, title, album, artist,path));
            }
        }
        cursor.close();

答案 2 :(得分:0)

我之前读了一篇博客,给你一个想法,我没试过,但感觉应该能够实现。

1.播放下一首音乐时,应用程序将被播放,广播将包含下一首歌曲的信息;

2.例如:Android系统的音乐播放器将发送&#34; com.android.music.metachanged&#34;广播;

3.registerReceiver

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.android.music.metachanged");
registerReceiver(Your Receiver, intentFilter);

4.意图分析,您可以从意图中获取此信息

intent.getStringExtra("album");
intent.getStringExtra("artist");
intent.getStringExtra("track");
intent.getStringExtra("notify_artistname");
intent.getStringExtra("notify_audioname");

5.我不知道Google Play音乐是否会发送广播,我也不确定Google Play音乐的IntentFilter。

6.祝你成功!

答案 3 :(得分:-1)

您需要阅读Id3Tag以获取此信息,以下是MediaMetadataRetriever的一些文档。您可以使用它在Android中使用Id3Tag。

用法示例:

MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(filePath);
String albumName = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);