我正在开发一个简单的音乐播放器,但是有时会出现错误(只有一行错误):
错误:在状态0下调用start,mPlayer(0x0)
我有一个MusicService
来操作一些关于音乐的东西。它的一部分:
@Override
public void onCreate() {
super.onCreate();
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setOnBufferingUpdateListener(this);
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setOnCompletionListener(this);
}
...
public void play(String url) {
try {
mediaPlayer.reset();
mediaPlayer.setDataSource(url);
mediaPlayer.prepareAsync();
} catch (Exception e) {
e.printStackTrace();
}
}
...
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
addTimer();
status = MUSIC_STATUS_PLAYING;
}
打开Activity,绑定MusicService,执行play()
时,有时会出现错误。
你知道吗?
1条答案
按热度按时间y1aodyip1#
我在Kotlin遇到了同样的问题,我能够解决它。
在我的例子中,我添加了MediaPlayer.create()在一个布尔语句中,所以让我们假设在片段1中我使用了一个名为“globalAudio”的布尔值,我从“MyModel”类全局设置了这个布尔值为真,因此它将正常执行MediaPlayer.create,因为它在条件体之外为真。但是,如果我移动到片段2并将布尔值“globalAudio”设置为假,当我返回片段1时,Logcat将向我抛出错误“在状态64中调用暂停,mPlayer(0xca 47 c 070)”和“错误(-38,0)",因为我试图在没有设置Media.create()的情况下启动音频。
我在下面附上了问题和解决方案,以便您更容易理解
问题
解决方案
在这里,我为您提供了一个Kotlin代码,它可以自动转换为Java在Android Studio: