首页 > 代码库 > Android获取第三方音乐播放器的音乐信息

Android获取第三方音乐播放器的音乐信息

最近在做Android手机获取第三方音乐播放器的音乐信息。一开始头疼的很,采集第三方的信息太难了,后面看了一遍博文是关于怎么监听系统的音乐播放信息,发现在播放下一首音乐的时候会发送广播,广播会包含下一首信息。

Android系统的音乐播放器会发送:

com.android.music.metachanged

那怎么获取第三方的音乐信息?

先反编译了QQ音乐的Apk, 找到它关于player的service,发现里面用的就是“com.android.music.metachaged”


接下来是Kugou,天天动听,千千静听

com.kugou.android.music.metachanged
com.ting.mp3.playinfo_changed

纠结的事出现是分析虾米,多米,Kuwo时候

虾米最新版本在反编译时报错,人家做了防反编译,虽然网上搜了怎么破解,但有点麻烦,留着后面学习。高版本做了防反编译,但你低版本的时候技术还没这么牛吧。我下了一个低版本,果然反编译成功,找到了“com.xiami.meta_changed‘。可虽然能获取到这个广播,但人家并没在广播里放数据,它在获取到广播的时候再去调用获取音乐的方法,这个代码就写的纠结了,到了这一步就没办法搞了。


多米和kuwo两者都没有发送广播,它们处理的方法都是回调,所以这两个也没办法获取。


下面代码是采集第三方音乐信息的代码

       IntentFilter iF = new IntentFilter();        iF.addAction("com.android.music.metachanged");        iF.addAction("com.android.music.playstatechanged");        iF.addAction("com.android.music.playbackcomplete");        iF.addAction("com.android.music.queuechanged");        iF.addAction("com.htc.music.metachanged");        iF.addAction("fm.last.android.metachanged");        iF.addAction("com.sec.android.app.music.metachanged");        iF.addAction("com.nullsoft.winamp.metachanged");        iF.addAction("com.amazon.mp3.metachanged");        iF.addAction("com.miui.player.metachanged");        iF.addAction("com.real.IMP.metachanged");        iF.addAction("com.sonyericsson.music.metachanged");        iF.addAction("com.rdio.android.metachanged");        iF.addAction("com.samsung.sec.android.MusicPlayer.metachanged");        iF.addAction("com.andrew.apollo.metachanged");        iF.addAction("com.kugou.android.music.metachanged");        iF.addAction("com.ting.mp3.playinfo_changed");        registerReceiver(new PlayerReceiver(), iF);
你需要在playerReceiver里面在加上处理广播里的信息

 String albumName = intent.getStringExtra("album");
        
        String artist = intent.getStringExtra("artist");
        
        String trackName = intent.getStringExtra("track");
        
        String xiaMiName=intent.getStringExtra("widget_song_name");
        
        System.out.println("The playing album name: " + albumName + " artist: "
                + artist + " Track:" + trackName+" xiaMiName:"+xiaMiName);
        
        String artistName = intent.getStringExtra("notify_artistname");
        String audioName = intent.getStringExtra("notify_audioname");

最终上述获取方法走不通,有些第三方的音乐信息获取不到。

还有一种实现方式,在播放音乐的时候,音乐播放器会发送一个notification,里面包含当前音乐的相关信息。这种方式需要在systemUI里面添加捕获代码,抓到特定的notification后,再屏幕取词?需要继续研究下。

这个分析后,发现广播用多了也不是什么好事,很容易被别人获取到数据。