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)
{
/* 因?yàn)槲冶镜豭ava的mp對(duì)象是定義的全局變量,所以通過類名.this.mp的方式得到我的對(duì)象,而非操作onCompletion(MediaPlayer mp)參數(shù)傳給我的native對(duì)象,這樣一來,本地java對(duì)象就被銷毀了,native對(duì)象自然也被銷毀了
*/
MainActivity.this.mp.release();
MainActivity.this.mp = null;
}
});
}
轉(zhuǎn)自: https://www.iteye.com/blog/lovelease-2105616