我想知道如何在活动之间传递MediaPlayer对象,以便我可以在应用程序中保持持续的声音播放。
答案 0 :(得分:3)
您不“在活动之间传递MediaPlayer
对象”。
您需要从自定义Service访问MediaPlayer
以在后台播放声音,并让您的活动与此服务互动。
对于互动,我个人的偏好是使用AIDL绑定。每当我尝试使用简单的意图和onStartCommand
()时,它就显示出不足以进行活动/服务交互(我也使用音频)。但它可能对你有用。
使用AIDL和绑定,您可以公开自定义函数,例如play(uri)
,pause()
,rewind()
等.... MediaPlayer
实例将在{ {1}}如果尚未实例化,并在您的服务play(uri)
中发布。
您甚至可以使用onDestroy()
注册听众,以获得有关职位变更或其他一些事件的通知。请参阅AIDL文档中的示例。这样做的好处是你的服务可以检测到监听器何时取消注册。这样,如果另一个侦听器(活动)没有快速注册,则在调用RemoteCallbackList
之前,服务中可能会有一个小超时。这很有用,因为您不一定知道某个活动是否暂停,因为用户按下了主页按钮,或者因为他正在从一个活动循环到另一个活动。
是的,它需要一点工作;)
注意:您仍需要在绑定之前调用stopSelf()
,否则只要活动解除绑定,服务就会停止。
答案 1 :(得分:0)