Android 媒体播放器搜索栏

发布于 2024-11-14 09:43:10 字数 132 浏览 5 评论 0原文

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

我花了很长时间才弄清楚:将 UI 中的搜索栏连接到服务中的媒体播放器的最佳或正确方法是什么?

I have a service that creates, plays and handles a mediaplayer (just audio), yet I have a seekbar in the main activity that I want to, naturally, show the progress of the audio file and allow the user to seek to various positions.

What I'm having a hell of a time figuring out is: what would be the best or proper way to connect the seekbar in the UI to the mediaplayer in the service?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

睡美人的小仙女 2024-11-21 09:43:10

以下是我执行此操作的方法:

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

  2. 在您的 Activity 的 onCreate 中绑定到服务

  3. 在您的 Activity 的 onResume 中使用 HandlerpostDelayed 函数开始更新。
  4. 在 Activity 的 onPause 中,停止通过 postDelayed 函数发布的所有回调。
  5. 在传递给 postDelayed 的 runnable 中运行 boundService.getCurrentPos()boundService.getDuration() 并相应地更新搜索栏。

总而言之,您应该使用服务绑定和处理程序来进行定期更新。

  1. 对于绑定服务,请阅读“绑定服务”文档(本地绑定服务在您的场景中应该足够了)。
  2. 如何使用Handler进行定期更新阅读这个问题:延迟重复任务?

Here is how I would do this:

  1. Bind to service that plays audio. The interface that server returns in onBind should have getCurrentPos() and getDuration() functions.

  2. In your Activity's onCreate bind to service

  3. In your Activity's onResume use Handler's postDelayed function to start updates.
  4. In your Activity's onPause stop all callbacks posted via postDelayed function.
  5. In runnable that is passed to postDelayed run boundService.getCurrentPos() and boundService.getDuration() and update the seekbar appropriately.

To summarize, you should use service binding and handler for recurring updates.

  1. For bound services read "Bound services" documentation (local bounded service should be sufficient in your scenario).
  2. How to user Handler for periodic updates read this question: Repeat a task with a time delay?
栩栩如生 2024-11-21 09:43:10

尝试查看 MediaController 看看它是否对您有用。

Try taking a look at MediaController to see if it's of use to you.

调妓 2024-11-21 09:43:10

您还可以尝试 Square 的 Otto

您只需要创建一个类 SeekBarSyncEvent.java

  • intprogressintdurationbooleanfromUser
  • code>,将您需要的
  • 然后您可以通过使用 SeekBarSyncEvent
  • 无论您需要什么

类从总线发布事件来从活动初始化搜索栏您的服务中的 onPrepared() 方法。

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

这应该工作得很好,很漂亮并且易于维护。

You can also try Otto from Square

You just need to create a class SeekBarSyncEvent.java, put the parameters you need in there:

  • int progress
  • int duration
  • boolean fromUser
  • whatever you need

Then you can initialize the seekbar from the activity by posting an event from the bus with your SeekBarSyncEvent class in the onPrepared() method from your service.

Finally create the @Subscribe method on your activity so it calls to your seekBarUpdate() method.

This should work fine, nice and easy to maintain.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文