【问题标题】:How to get the Song ID, Album ID and Artist ID from the currently playing song from the google play music如何从谷歌播放音乐中获取当前正在播放的歌曲中的歌曲 ID、专辑 ID 和艺术家 ID
【发布时间】:2017-06-23 13:03:10
【问题描述】:

我正在开发我的应用程序,我想在其中获取在任何媒体应用程序上播放的歌曲的详细信息。 我没有获取当前正在播放歌曲详细信息(如歌曲 ID、艺术家 ID、专辑 ID)的 Google Play 音乐应用的数据。

我试过下面的代码:

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);
        }
    };

在默认播放器中获取歌曲详细信息,而不是在 google play 音乐中。

【问题讨论】:

    标签: android


    【解决方案1】:

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

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

    private void loadPlayMusicSongDetails(Context context, String trackId){
        String artistName = null;
        String albumName = null;
        String trackName = null;
        long year = 0;
    
        String[] proj = { MediaStore.Audio.AudioColumns.TITLE,
                MediaStore.Audio.AudioColumns.ARTIST,
                MediaStore.Audio.AudioColumns.ALBUM,
                MediaStore.Audio.AudioColumns.YEAR,
                MediaStore.Audio.AudioColumns.ALBUM_ID,
                PLAY_MUSIC_COLUMN_ARTWORK_LOCATION,
                //"artworkUrl",
                //"VThumbnailUrl",
                MediaStore.Audio.AudioColumns._ID };
    
        Uri gMusicUri = Uri.parse("content://com.google.android.music.MusicContent/audio");
    
        try {
            Uri uri = ContentUris.withAppendedId(gMusicUri, Long.parseLong(trackId));
            Cursor cursor = context.getContentResolver().query(uri,
                    proj, null, null, null);
    
            if(cursor.moveToFirst()){
                int titleColumn = cursor.getColumnIndex(MediaStore.Audio.AudioColumns.TITLE);
                int artistColumn = cursor.getColumnIndex(MediaStore.Audio.AudioColumns.ARTIST);
                int albumColumn = cursor.getColumnIndex(MediaStore.Audio.AudioColumns.ALBUM);
                int yearColumn = cursor.getColumnIndex(MediaStore.Audio.AudioColumns.YEAR);
                int albumArtColumn = cursor.getColumnIndex(PLAY_MUSIC_COLUMN_ARTWORK_LOCATION);
    
                trackName = cursor.getString(titleColumn);
                artistName = cursor.getString(artistColumn);
                albumName = cursor.getString(albumColumn);
                year = cursor.getLong(yearColumn);
                String albumArtLocation = cursor.getString(albumArtColumn);
    
                if(albumArtLocation != null && albumArtLocation.length() > 0){
                    if(albumArtLocation.startsWith("mediastore:")){
                        long albumId = Long.parseLong(albumArtLocation.substring(albumArtLocation.indexOf(":")+1));
                        Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");
                        setAlbumArtUri(ContentUris.withAppendedId(sArtworkUri, albumId));
                    }
                    else {
                        //TODO: perform http calls if you wanna query for online images
                    }
                }
            }
    

    【讨论】:

      【解决方案2】:

      要获取歌曲 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();
      

      【讨论】:

        【解决方案3】:

        之前看过一篇博客,给大家想想,没试过,不过感觉应该可以实现。

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

        2.例如:Android系统的音乐播放器会发送“com.android.music.metachanged”广播;

        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 Music是否会发送广播,我也不确定Google Play Music的IntentFilter。

        6.祝你成功!

        【讨论】:

          【解决方案4】:

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

          使用示例:

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

          【讨论】:

          • 我正在使用元数据获取专辑名称,但我没有获取专辑封面和播放音乐的专辑 ID。
          • 你使用什么 API?
          猜你喜欢
          • 2013-03-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多