【发布时间】:2014-12-01 00:05:48
【问题描述】:
这是我的源代码
private MediaPlayer mP;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mP = MediaPlayer.create(getApplicationContext(),R.raw.nintendo);
}
@Override
protected void onResume() {
super.onResume();
try {
mP.prepareAsync();
} catch (IllegalStateException e) {
e.printStackTrace();
}
mP.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mP.seekTo(0);
mP.start();
}
});
}
@Override
protected void onPause() {
super.onPause();
mP.stop();
mP.release();
}
这是我在尝试运行 Logcat 时得到的结果
第 64 行:mP.stop();
当我执行以下序列时,会出现此 Logcat 输出, 启动 -> 主屏幕->返回应用程序 -> 主屏幕
现在我知道当您尝试进行无效的状态更改时会发生 IllegalStateException。从http://developer.android.com/reference/android/media/MediaPlayer.html,我知道有效的状态变化是从“开始到停止”或“停止到停止”。我认为我的代码中的逻辑代表了一个有效的状态变化(从 onPause 开始到 onPause 停止/释放)。 我进一步调试并意识到在我转到主屏幕并返回应用程序后,onPrepared 没有被调用......我也不明白这一点,因为我事先调用了 mP.prepareAsync() (异步以避免事先阻塞这个主 ui 线程)。 onPrepared 不应该在所有声音资源都收集完之后触发吗?
我查看了其他一些线程 不可能是这个Android Media Player,因为我很好地构建了 MediaPlayer。 再次在这里android MediaPlayer not playing mp3 file 没有解决我的问题,因为我构建了 MediaPlayer 并且它在我第一次启动应用程序时播放了声音。
有人发现这段代码有问题吗?
【问题讨论】: