private void doPlayVoice(String voiceSrc) {
if (mp == null)
{
mp = new MediaPlayer().create(MainActivity.this, "dangerous".equalsIgnoreCase(voiceSrc) ? R.raw.dangerous : R.raw.safe);
}
if (mp.isPlaying())
{
mp.stop();
mp.release();
mp = null;
mp = new MediaPlayer().create(MainActivity.this, "dangerous".equalsIgnoreCase(voiceSrc) ? R.raw.dangerous : R.raw.safe);
}
try
{
mp.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
mp.prepareAsync();
} catch (IllegalArgumentException e)
{
e.printStackTrace();
} catch (SecurityException e)
{
e.printStackTrace();
} catch (IllegalStateException e)
{
e.printStackTrace();
} catch (Exception e)
{
e.printStackTrace();
}
mp.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp)
{
/* 因为我本地java的mp对象是定义的全局变量,所以通过类名.this.mp的方式得到我的对象,而非操作onCompletion(MediaPlayer mp)参数传给我的native对象,这样一来,本地java对象就被销毁了,native对象自然也被销毁了
*/
MainActivity.this.mp.release();
MainActivity.this.mp = null;
}
});
}
Android使用MediaPlayer播放音频(已解决IllegalStateException)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。