【问题标题】:Android MediaPlayer - only one instance at any given time?Android MediaPlayer - 在任何给定时间只有一个实例?
【发布时间】:2010-06-28 00:10:27
【问题描述】:
我有一个音频播放器应用程序,其中有一个显示 3 个音频示例 url 的主要活动。单击一个,它会转到一个详细信息活动,其中有一个播放和暂停按钮,以启动和暂停音频。
我的问题是,当我启动 Main 活动并说单击音频 1 时,我在 Details 活动上点击了播放。这将启动 MediaPlayer 并开始播放音频。当我回到主要活动时,音频仍在播放,这就是我想要的。现在,当我再次单击音频 1 并转到 Details Activity 并再次点击播放时,似乎有一个新的 MediaPlayer 开始播放音频。所以我有 2 首曲目一起播放!
有没有一种方法可以让我在任何给定时间都只有一个 MediaPlayer 实例?
谢谢
克里斯
【问题讨论】:
标签:
android
audio
android-activity
media-player
【解决方案1】:
您应该考虑Singleton pattern。创建一个具有静态方法 getMediaPlayer() 的 MyPlayer 类,该方法每次调用都返回相同的 MediaPlayer 实例。
【解决方案2】:
单例类
public final class MySingleton extends Application {
static MediaPlayer instance;
public static MediaPlayer getInstance() {
if (instance == null)
{
instance = new MediaPlayer();
}
return instance;
}
}
适配器在你的列表中
在构造函数中一次性初始化你的单例类
private static MediaPlayer mMediaPlayer = MySingleton.getInstance();
if (mMediaPlayer.isPlaying()) {
try {
mMediaPlayer.reset();
mMediaPlayer.stop();
mMediaPlayer.setDataSource(mainActivity, Uri.parse(songsarraylist.get(position).getPath()));
mMediaPlayer.prepare();
mMediaPlayer.start();
} catch (Exception e) {
Toast.makeText(mainActivity, "Catching", Toast.LENGTH_SHORT).show();
}
} else {
try {
mMediaPlayer.setDataSource(mainActivity, Uri.parse(songsarraylist.get(position).getPath()));
mMediaPlayer.prepare();
mMediaPlayer.start();
} catch (IOException e) {
e.printStackTrace();
}
}