目标是MediaPlayer从任何班级访问以随时暂停或开始播放另一首旋律。可以在子类中创建Application静态实例MediaPlayer,但我们仍然需要处理现在将播放的旋律的方法、释放资源的方法等等。我不想将所有这些都堆积在子类中Application,特别是因为它已经有一个方法可以将其上下文返回给我,以便我可以在单例中进行初始化MediaPlayer。我最终创建了一个单独的单例类。
public class MediaPlayerSingleton implements MediaPlayer.OnCompletionListener {
private static MediaPlayerSingleton mpSingleton;
private MediaPlayer mediaPlayer;
private MediaPlayerSingleton() {
}
static MediaPlayerSingleton getInstance() {
if (mpSingleton == null) mpSingleton = new MediaPlayerSingleton();
return mpSingleton;
}
void play() {
mediaPlayer = MediaPlayer.create(MyApplication.getAppContext(), R.raw.melodiya);
mediaPlayer.start();
mediaPlayer.setOnCompletionListener(this);
}
@Override
public void onCompletion(MediaPlayer mp) {
releaseMP();
mediaPlayer = MediaPlayer.create(MyApplication.getAppContext(), R.raw.acdc);
}
private void releaseMP(){
if(mediaPlayer != null){
mediaPlayer.release();
mediaPlayer = null;
}
}
现在我在一些活动上调用该方法getInstance.play();。但是在播放结束时,监听器不起作用。我认为我认为它会起作用是错误的,因为该班级不是Activity重点关注的 . 没有它你看不到这里Service吗?或者还有什么方法可以在没有服务的情况下实现监听器?可能,如果您将侦听器放在所有活动上,那么这会起作用,但看起来不太好。
可能有必要
mediaPlayer.setOnCompletionListener(this)在启动时(或每个实例的创建)调用它,否则他怎么知道谁在等待音乐结束?