我有一个服务,可以创建、播放和处理媒体播放器(只有音频),但是我在主活动中有一个拖动条,我想自然地显示音频文件的进度并允许用户寻找各种位置。
我现在遇到的问题是:将UI中的拖动条与服务中的媒体播放器连接起来,什么是最好或正确的方法?
我有一个服务,可以创建、播放和处理媒体播放器(只有音频),但是我在主活动中有一个拖动条,我想自然地显示音频文件的进度并允许用户寻找各种位置。
我现在遇到的问题是:将UI中的拖动条与服务中的媒体播放器连接起来,什么是最好或正确的方法?
绑定播放音频的服务。服务器在 onBind
中返回的接口应该具有 getCurrentPos()
和 getDuration()
函数。
在您的 Activity 的 onCreate
中绑定服务
onResume
中,使用 Handler
的 postDelayed
函数开始更新。onPause
中,停止通过 postDelayed
函数发布的所有回调。postDelayed
的可运行对象中,运行 boundService.getCurrentPos()
和 boundService.getDuration()
并相应地更新 seekbar。总之,您应该使用服务绑定和处理程序进行周期性更新。
Handler
进行定期更新,请阅读此问题:重复带有时间延迟的任务?你也可以尝试来自Square的Otto
你只需要创建一个类SeekBarSyncEvent.java
,把你需要的参数放在里面:
然后你可以通过在服务的onPrepared()
方法中发布一个包含你的SeekBarSyncEvent
类的事件,从活动中初始化seekbar。
最后,在你的活动中创建@Subscribe
方法,使其调用你的seekBarUpdate()
方法。
这样应该可以正常工作,易于维护。