如何将MediaPlayer Service绑定到多个活动?

How to bind MediaPlayer Service to multiple activities?

提问人:Muthu Ruban 提问时间:2/14/2022 更新时间:2/14/2022 访问量:177

问:

我正在创建一个音乐播放器应用程序。我创建了一个类,并且在 .但是我不知道如何在不使它为 null 的情况下传递该服务并将其传递给另一个活动,因为我也想从另一个活动控制它。如果我试图从主活动类中获取它,那么我得到了.MediaPlayerServiceMainActivityNullPointerException

提前致谢

Android-Activity 服务 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 referenceplayer.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