【发布时间】:2017-11-29 22:14:13
【问题描述】:
好的,我正在编写一个简单的呼叫/拨号应用程序,并为每个号码创建了按钮。我正在尝试使用 MediaPlayer 类实现声音,因此每当用户单击/点击按钮声音时都会播放。它正在工作,但是在点击 30 次后没有播放声音,只有当我重新启动应用程序时,我才能在停止后再次听到 30 次点击的声音,然后我得到了错误。
我也尝试过使用 SoundPool 类,但在单击 30 次后我再次听不到声音。有什么解决办法吗?
onButtonClick 方法:
MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.button_sound);
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
if (mp.isPlaying()) {
mp.stop();
mp.release();
} else {
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
}
} catch (Exception e) {
e.printStackTrace();
}
错误日志:
11-29 23:01:03.632 12572-12572/com.phonecalldemo E/MediaPlayer-JNI: QCMediaPlayer 媒体播放器不存在 11-29 23:01:03.662 12572-12572/com.phonecalldemo E/MediaPlayer:应该有字幕 控制器已设置 11-29 23:01:03.672 12572-12572/com.phonecalldemo E/MediaPlayer: 错误 (-19, 0) 11-29 23:01:03.682 12572-12572/com.phonecalldemo E/MediaPlayer: 错误 (-19,0)
【问题讨论】:
-
我无法告诉您发生这种情况的具体原因,但为什么会有 30 次点击?每次都是同一个号码吗?是否有可能发生了某些事情,例如您的设备旋转了?另外,您应该将
this作为上下文,而不是getApplicationContext(),这可能是问题的一部分。 (这是本身就是一个上下文的活动) -
是的,或多或少有 30 次点击(1-3 次不同)。没有设备不旋转,我在我的活动中将屏幕方向设置为纵向。我将 getApplicationContext 更改为“this”,它仍然是一样的。我收到那个错误:E/MediaPlayer: 应该已经设置了字幕控制器 11-30 11:40:57.080 12114-12114/com.phonecalldemo E/MediaPlayer-JNI: QCMediaPlayer mediaplayer NOT present
-
在 Google 上查找
MediaPlayer: Should have subtitle controller already set我已经找到了很多关于此的问题和答案。 -
@NicolasMaltais 我自己找到了解决方案,添加了新回复。
标签: android