我有一個循環全部按鈕和一個停止按鈕。當我還在頁面上時,兩個按鈕都可以正常工作。問題是,當我點擊循環所有按鈕時,它會按照它應有的播放一系列音頻文件,但當我離開頁面(即按下手機的後退按鈕)並返回到頁面時,音頻不會「不要停下來!我點擊了停止按鈕,但它什麼也沒做。阻止它的唯一方法是進入任務管理器並結束程序。在我看來,一旦我離開頁面,mp2的引用會丟失......有沒有人對如何解決這個問題有任何建議。任何幫助,將不勝感激。下面是代碼:如何銷燬活動?
public class OneVoc extends ActionBarActivity {
private ListView lv;
private MediaPlayer mp;
private MediaPlayer mp2;
int[] myAudio = {R.raw.v_1100, R.raw.v_1101, R.raw.v_1102, R.raw.v_1103, R.raw.v_1104, R.raw.v_1105,
R.raw.v_1113, R.raw.v_1106, R.raw.v_1107, R.raw.v_1108, R.raw.v_1109, R.raw.v_1110, R.raw.v_1112,
R.raw.v_1114, R.raw.v_1115, R.raw.v_1116};
int mCompleted = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.one_voc);
Button btnLoop = (Button) findViewById(R.id.button1);
Button btnStop = (Button) findViewById(R.id.button2);
btnStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (mp2 != null) {
if (mp2.isPlaying()) {
mp2.setOnCompletionListener(null);
mp2.stop();
}
mp2.reset();
mp2.release();
mp2 = null;
}
}
});
btnLoop.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
mp2 = MediaPlayer.create(getBaseContext(), myAudio[0]);
mp2.setOnCompletionListener(new OnCompletionListener()
{
@Override
public void onCompletion(MediaPlayer mp2)
{
mCompleted++;
mp2.reset();
if (mCompleted < myAudio.length)
{
try
{
AssetFileDescriptor afd = getResources().openRawResourceFd(myAudio[mCompleted]);
if (afd != null)
{
mp2.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();
mp2.prepare();
mp2.start();
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
else if (mCompleted == myAudio.length)
{
mCompleted =0;
try
{
AssetFileDescriptor afd = getResources().openRawResourceFd(myAudio[mCompleted]);
if (afd != null)
{
mp2.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();
mp2.prepare();
mp2.start();
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
else
{
mCompleted=0;
mp2.release();
mp2 = null;
}
}
});
mp2.start();
}
});
想盡了辦法'完成()' – mapodev
覆蓋活動的onPause()(不要忘記調用super.onPause();) – EpicPandaForce
在你的onDestroy()活性的方法,嘗試執行點擊btnStop (btnStop.performClick())。但請確保btnStop不引用null。 –