Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android媒体播放器seekbar_Android_Android Service_Android Mediaplayer_Android Seekbar - Fatal编程技术网

Android媒体播放器seekbar

Android媒体播放器seekbar,android,android-service,android-mediaplayer,android-seekbar,Android,Android Service,Android Mediaplayer,Android Seekbar,我有一个创建、播放和处理mediaplayer(仅音频)的服务,但我在主要活动中有一个seekbar,我想自然地显示音频文件的进度,并允许用户搜索不同的位置 我花了很长时间才弄明白:将UI中的seekbar连接到服务中的mediaplayer的最佳或正确方法是什么?试着看看它是否对您有用。下面是我将如何做的: 绑定到播放音频的服务。服务器在onBind中返回的接口应该具有getCurrentPos()和getDuration()函数 在活动的onCreate绑定到服务中 在活动的onResume

我有一个创建、播放和处理mediaplayer(仅音频)的服务,但我在主要活动中有一个seekbar,我想自然地显示音频文件的进度,并允许用户搜索不同的位置


我花了很长时间才弄明白:将UI中的seekbar连接到服务中的mediaplayer的最佳或正确方法是什么?

试着看看它是否对您有用。

下面是我将如何做的:

  • 绑定到播放音频的服务。服务器在
    onBind
    中返回的接口应该具有
    getCurrentPos()
    getDuration()
    函数

  • 在活动的
    onCreate
    绑定到服务中

  • 在活动的
    onResume
    中,使用
    Handler
    postdayed
    功能启动更新
  • 在活动的
    onPause
    中,停止通过
    postDelayed
    功能发布的所有回调
  • 在runnable中,传递给
    postDelayed
    运行
    boundService.getCurrentPos()
    boundService.getDuration()
    并适当更新seekbar
  • 总之,您应该使用服务绑定和处理程序进行定期更新

  • 对于绑定服务,请阅读文档(在您的场景中,本地绑定服务应该足够了)
  • 如何使用
    处理程序
    定期更新阅读此问题:
  • 你也可以试试

    您只需创建一个类
    SeekBarSyncEvent.java
    ,将所需参数放入其中:

    • 智力进步
    • 整数持续时间
    • 布尔fromUser
    • 你需要什么都行
    然后,您可以使用服务中的
    onPrepared()
    方法中的
    SeekBarSyncEvent
    类从总线发布事件,从而从活动中初始化seekbar

    最后,在您的活动上创建
    @Subscribe
    方法,以便它调用您的
    seekBarUpdate()
    方法

    这应该工作良好,很好,易于维护