提问人:Muthu Ruban 提问时间:2/14/2022 更新时间:2/14/2022 访问量:177
如何将MediaPlayer Service绑定到多个活动?
How to bind MediaPlayer Service to multiple activities?
问:
我正在创建一个音乐播放器应用程序。我创建了一个类,并且在 .但是我不知道如何在不使它为 null 的情况下传递该服务并将其传递给另一个活动,因为我也想从另一个活动控制它。如果我试图从主活动类中获取它,那么我得到了.MediaPlayerService
MainActivity
NullPointerException
提前致谢
答:
0赞
Naum PS
2/14/2022
#1
如果没有代码,我可以提出一个简单的解决方案:单例模式。 在 Kotlin 中,您可以像这样定义单例:
object MediaPlayerService {
fun play(...) {...}
}
并使用它:
MediaPlayerService.play(...)
这样,您将只有一个对象实例。创建实例后,您可以使用 Kotlin Flow 进行发布和订阅。在这里,您可以阅读有关 Kotlin Flows 的更多信息。
评论
0赞
Muthu Ruban
2/15/2022
正如您所说,使用单例,它运行良好。但是当我尝试在第二个活动中更改歌曲时,我@Naum PS 中得到了这一行java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
player.setDataSource(getApplicationContext(),trackUri);
0赞
Naum PS
2/15/2022
看起来 Context 为 null。您可以做的是在创建单一实例时发送应用程序上下文。您可以创建一个方法 setContext(context: Context) 并将其存储为 val。只有在初始化 sigleton 类后才调用此方法。 @MuthuRuban
0赞
Muthu Ruban
2/15/2022
非常感谢兄弟...它运行良好。再次感谢 @Naum PS
0赞
Naum PS
2/15/2022
没关系。如果您对答案感到满意,请接受它作为正确的答案。@MuthuRuban
评论