我有一个创建、播放和处理媒体播放器(只是音频)的服务,但我在主要活动中有一个搜索栏,我想自然地显示音频文件的进度并允许用户搜索到各个位置。
我花了很长时间才弄清楚:将 UI 中的搜索栏连接到服务中的媒体播放器的最佳或正确方法是什么?
我有一个创建、播放和处理媒体播放器(只是音频)的服务,但我在主要活动中有一个搜索栏,我想自然地显示音频文件的进度并允许用户搜索到各个位置。
我花了很长时间才弄清楚:将 UI 中的搜索栏连接到服务中的媒体播放器的最佳或正确方法是什么?
这是我将如何做到这一点:
绑定到播放音频的服务。服务器返回的接口onBind应具有getCurrentPos()和getDuration()功能。
在您的 ActivityonCreate绑定到服务中
onResume函数中开始更新。HandlerpostDelayedonPause 发布的所有回调。postDelayedpostDelayedrunboundService.getCurrentPos()并boundService.getDuration()适当地更新 seekbar。总而言之,您应该使用服务绑定和处理程序进行定期更新。
Handler定期更新阅读此问题:Repeat a task with a time delay?你也可以试试Square 的 Otto
你只需要创建一个类SeekBarSyncEvent.java,把你需要的参数放在那里:
然后,您可以通过在您的服务的方法中使用您的SeekBarSyncEvent类从总线发布一个事件来初始化活动中的搜索栏。onPrepared()
最后@Subscribe在您的活动上创建方法,以便它调用您的seekBarUpdate()方法。
这应该可以正常工作,美观且易于维护。
试着看看MediaController看看它是否对你有用。