Android获取音乐封面信息并在其它应用中显示

编程入门 行业动态 更新时间:2024-10-14 16:20:22

Android获取音乐封面信息<a href=https://www.elefans.com/category/jswz/34/1771370.html style=并在其它应用中显示"/>

Android获取音乐封面信息并在其它应用中显示

 

背景

播放当前板子上的音乐,同时获取音乐信息(封面、时长、歌名)并在其他应用中显示并模拟播放,以实现音乐的同步播放的功能。这里以获取封面信息为例讲解实现。

 

方案

Android源生+socket服务+第三方应用。用Android源生的media播放器,实现获取音乐信息的功能,并在其中添加自定义的AIDL服务;用于和socket服务通讯。Socket服务接收media播放器传过来的封面uri信息,并解析成字节数组,然后通过socket发送出去;第三方应用作为socket服务端,用以接收字节信息并显示音乐封面。这里socket通讯作了大小限制,每次传输1024字节,加开始和结束标识,分多次传送音乐封面信息。

 

Android源生media端

添加一个AIDL服务并定义一个传输数据的接口;实现一个Application类,定义传输数据的方法,和socket服务建立连接,连接成功后取得AIDL服务,在传输数据方法中调用AIDL中的接口;在适当的地方调用Application的传输数据方法传输数据,这里是MediaPlaybackFragment。

 

AIDL服务

interface ICarMediaInterface {
        void transportData(int dataID, int dataType, String data);
}

定义的接口很简单,音乐ID,类型(封面、歌名、时长等),数据。

 

Application类

public class MyApplication extends Application {private static final String TAG = "MyApplication";private static ICarMediaInterface mAidl;@Overridepublic void onCreate() {super.onCreate();bindSocketService();}private void bindSocketService(){Intent intent = new Intent();intent.setAction("com.winter.captureservice.SYNC");intent.setPackage("com.winter.captureservice");bindService(intent, mConnection, Context.BIND_AUTO_CREATE);}private ServiceConnection mConnection = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {mAidl = ICarMediaInterface.Stub.asInterface(service);if(mAidl == null){bindSocketService();}}@Overridepublic void onServiceDisconnected(ComponentName name) {mAidl = null;bindSocketService();}};public void transportData(int dataID, int dataType, String data) {if(mAidl == null){bindSocketService();return;}try {mAidl.transportData(dataID, dataType, data);} catch (Exception ex) {Log.e(TAG, "winter===transportData() ex:" + ex);}}}

 

Application类中就是建立连接,传输数据。

 

MediaPlaybackFragment调用地方

在其onMetadataChanged方法中获取到iconUri后调用。

((MyApplication)getActivity().getApplication()).transportData(0, 1, iconUri.toString());

关于MediaPlaybackFragment类及Android  Car音乐播放器分析请参见文章Android Car音乐播放器分析

 

 

Socket服务端

Socket服务端和Media定义相同的AIDL接口,获取音乐封面URI信息,并解析成字节数组,然后通过socket把数据发送出去。

Socket服务端的代码实现请见Android解析音乐URI的后台服务

 

 

第三方应用

第三方应用作为socket服务端,定义ip、端口接收数据。接收到数据后按格式解析成图片信息并显示出来。

第三方应用的代码实现请见Android显示音乐URI的图片应用

 

分屏同步播放

如果有多个屏幕,音乐播放时,第三方应用可以实现同步播放的功能。实现多屏同步播放的效果。

 

更多推荐

Android获取音乐封面信息并在其它应用中显示

本文发布于:2024-03-23 20:26:10,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1742456.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:并在   封面   音乐   信息   Android

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!