2013-10-25 9 views
1

我正在嘗試做小應用程序......我在應用程序中使用了不同的聲音..我很困惑,我應該使用方法release()來釋放資源。我應該在android中使用release()方法?

可你有看我的代碼,讓我知道,如果我在正確的方向我要去:

import android.graphics.Color; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 

public class SpellToNumbers extends Activity implements OnClickListener { 

    Button btn_next; 
    Button btn_restart; 
    Button btn_previous; 
    TextView tvSTN, tvSTNN; 
    int a = 0; 
    RelativeLayout stnXML; 

    MediaPlayer vone,vtwo,vthree,vfour,vfive,vsix,vseven,veight,vnine,vten; 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.spell_to_numbers); 


     MediaPlayer onStart = MediaPlayer.create(SpellToNumbers.this, R.raw.one110); 
     onStart.start(); 


    tvSTN = (TextView) findViewById(R.id.tvSTN); 
    tvSTNN = (TextView) findViewById(R.id.tvSTNN); 
    stnXML = (RelativeLayout) findViewById(R.id.stnXML); 
    btn_next = (Button) findViewById(R.id.btnNextSTN); 
    btn_next.setOnClickListener(this); 
    btn_restart = (Button) findViewById(R.id.btnRestartSTN); 
    btn_restart.setOnClickListener(this); 
    btn_previous = (Button) findViewById(R.id.btnPreviousSTN); 
    btn_previous.setOnClickListener(this); 


    vone = MediaPlayer.create(this,R.raw.one110); 
    vtwo = MediaPlayer.create(this,R.raw.two210); 
    vthree = MediaPlayer.create(this,R.raw.three310); 
    vfour = MediaPlayer.create(this,R.raw.four410); 
    vfive = MediaPlayer.create(this,R.raw.five510); 
    vsix = MediaPlayer.create(this,R.raw.six610); 
    vseven = MediaPlayer.create(this,R.raw.seven710); 
    veight = MediaPlayer.create(this,R.raw.eight810); 
    vnine = MediaPlayer.create(this,R.raw.nine910); 
    vten = MediaPlayer.create(this,R.raw.ten1010); 

    }//onCreate ends 




    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 

    }//onCreateOptionMenu ends 



    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
     case R.id.btnRestartSTN: 
      restart(); 

      break; 

     case R.id.btnNextSTN: 
      next(); 

      break; 

     case R.id.btnPreviousSTN: 

      previous(); 

      break; 
     }//switch ends 

    }//onClick ends 




    private void restart() { 
     a = 0; 
     setPage(); 
    } 

    private void previous() { 
     if (a > 0) { 
      a--; 
     } 
     setPage(); 
    } 

    private void next() { 
     if (a < 9) { 
      a++; 
     } 
     setPage(); 
    } 




      private void setPage() { 
        if (a == 0) { 
         tvSTNN.setText("1"); 
         tvSTN.setText("ONE"); 
         tvSTNN.setTextColor(Color.parseColor("#F2416B")); 
         tvSTN.setTextColor(Color.parseColor("#F2416B")); 
         stnXML.setBackgroundColor(Color.parseColor("#3FD161")); 
         vone.start(); 
         } 
        if (a == 1) 
         { 
         tvSTNN.setText("2"); 
         tvSTNN.setTextColor(Color.parseColor("#F0EFDA")); 
         tvSTN.setText("TWO"); 
         tvSTN.setTextColor(Color.parseColor("#F0EFDA")); 
         stnXML.setBackgroundColor(Color.parseColor("#0A0EF5")); 
         vtwo.start(); 
         } 

        else if (a == 2) 
         {      
         tvSTNN.setText("3"); 
         tvSTNN.setTextColor(Color.parseColor("#F5F507")); 
         tvSTN.setText("THREE"); 
         tvSTN.setTextColor(Color.parseColor("#F5F507")); 
         stnXML.setBackgroundColor(Color.parseColor("#D15BE3")); 
         vthree.start(); 
         } 

        else if (a == 3) 
         {      
         tvSTNN.setText("4"); 
         tvSTNN.setTextColor(Color.parseColor("#0AF5DD")); 
         tvSTN.setText("FOUR"); 
         tvSTN.setTextColor(Color.parseColor("#0AF5DD")); 
         stnXML.setBackgroundColor(Color.parseColor("#F50A0A")); 
         vfour.start(); 
         } 

        else if (a == 4) 
         {      
         tvSTNN.setText("5"); 
         tvSTNN.setTextColor(Color.parseColor("#171117")); 
         tvSTN.setText("FIVE"); 
         tvSTN.setTextColor(Color.parseColor("#171117")); 
         stnXML.setBackgroundColor(Color.parseColor("#0AF5DD")); 
         vfive.start(); 
         } 

        else if (a == 5) 
         {      
         tvSTNN.setText("6"); 
         tvSTNN.setTextColor(Color.parseColor("#072BF5")); 
         tvSTN.setText("SIX"); 
         tvSTN.setTextColor(Color.parseColor("#072BF5")); 
         stnXML.setBackgroundColor(Color.parseColor("#0AF525")); 
         vsix.start(); 
         } 

        else if (a == 6) 
         {      
         tvSTNN.setText("7"); 
         tvSTNN.setTextColor(Color.parseColor("#8F0AF5")); 
         tvSTN.setText("SEVEN"); 
         tvSTN.setTextColor(Color.parseColor("#8F0AF5")); 
         stnXML.setBackgroundColor(Color.parseColor("#F5F10A")); 
         vseven.start(); 
         } 

        else if (a == 7) 
         {      
         tvSTNN.setText("8"); 
         tvSTNN.setTextColor(Color.parseColor("#37F507")); 
         tvSTN.setText("EIGHT"); 
         tvSTN.setTextColor(Color.parseColor("#37F507")); 
         stnXML.setBackgroundColor(Color.parseColor("#9C2497")); 
         veight.start(); 
         } 

        else if (a == 8) 
         {      
         tvSTNN.setText("9"); 
         tvSTNN.setTextColor(Color.parseColor("#F50707")); 
         tvSTN.setText("NINE"); 
         tvSTN.setTextColor(Color.parseColor("#F50707")); 
         stnXML.setBackgroundColor(Color.parseColor("#BAF50A")); 
         vnine.start(); 
         } 

        else if (a == 9) 
         { 
         tvSTNN.setText("10"); 
         tvSTNN.setTextColor(Color.parseColor("#0ACAF5")); 
         tvSTN.setText("TEN"); 
         tvSTN.setTextColor(Color.parseColor("#0ACAF5")); 
         stnXML.setBackgroundColor(Color.parseColor("#F5700A")); 
         vten.start(); 
         tvSTN.setClickable(false); 
         } 

     }//setPage Method ends 

}//end of class 
+0

感謝Tshepang的編輯...其實英語不是我的母語。 – hamza

回答

0

檢查你的代碼後,我覺得這是更好地使用的Soundpool,而不是媒體播放器。當你的應用程序要後臺(onPause())和onResume()時,你可以重新分配資源給mediaplayer,任何你可以從mediaplayer發佈你的資源的方式。

@Override 
public void onPause() 
{ 
    onStart.release(); 
    super.onPause(); 
} 

@Override 
public void onResume() 
{ 
    vone = MediaPlayer.create(this,R.raw.one110); 
    vtwo = MediaPlayer.create(this,R.raw.two210); 
    vthree = MediaPlayer.create(this,R.raw.three310); 
    vfour = MediaPlayer.create(this,R.raw.four410); 
    vfive = MediaPlayer.create(this,R.raw.five510); 
    vsix = MediaPlayer.create(this,R.raw.six610); 
    vseven = MediaPlayer.create(this,R.raw.seven710); 
    veight = MediaPlayer.create(this,R.raw.eight810); 
    vnine = MediaPlayer.create(this,R.raw.nine910); 
    vten = MediaPlayer.create(this,R.raw.ten1010); 
    super.onResume(); 
} 
+0

好的...如果我點擊下一個按鈕或上一個按鈕連續意味着沒有任何暫停,因此可以影響播放聲音? – hamza

+0

請告訴我什麼時候和誰會調用onPause()...? – hamza

+0

對不起,我的意思是onResume()不onPause() – hamza

0

我感到困惑的是,我應該使用方法釋放();

如果你只使用MediaPlayer播放一首歌曲,一個時間,那麼你應該把在onPause()

@Override 
public void onPause() 
{ 
    onStart.release(); 
    super.onPause(); 
} 

這將釋放資源,如果另一Activity進入前臺或者如果Activity被銷燬。如果您在Activity的不同地方使用它,則每次完成後您都會想要釋放資源,然後再次調用start()

+0

請你可以更新我的代碼....? – hamza

0

上的onResume(),如果創建成功

的的onPause()方法暫停MediaPlayer的方法啓動媒體播放器。如果活動將被終止,請停止MediaPlayer,然後釋放其所有資源。

@Override 
protected void onResume() { 
    super.onResume(); 
    if (mediaPlayer != null) { 
    mediaPlayer.start(); 
    } 
} 

protected void onPause() { 
    super.onPause(); 
    if (mediaPlayer != null) { 
    mediaPlayer.pause(); 
    if (isFinishing()) { 
    mediaPlayer.stop(); 
    mediaPlayer.release(); 
    } 
} 
+0

感謝親愛的拉多斯拉夫....這是有幫助 – hamza

相關問題