2011-04-05 60 views
0

我只是在這裏學習。我試圖製作一個大約有四十種聲音的音板,但我在使用一個maphash讓它工作時遇到了一些麻煩。任何人都可以救我嗎?MediaPlayer和地圖問題的Android應用程序(noob問題)

--------------音板-------------------------

import android.app.Activity; 
import android.content.Intent; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ImageButton; 
import java.util.HashMap; 
import java.util.Map; 

public class main extends Activity { 

MediaPlayer mp=null; 

\\\if I put put "MediaPlayer mp;" here it only plays one sound\\\ 

ImageButton Button; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Map<Integer, Integer> map = new HashMap<Integer, Integer>(); 
    map.put(R.id.button1, R.raw.sound1); 
    map.put(R.id.button2, R.raw.sound2); 

    for (Map.Entry<Integer, Integer> entry : map.entrySet()) { 
     mp = MediaPlayer.create(this, entry.getValue()); 


\\\if I put "final MediaPlayer mp = MediaPlayer.create(this, entry.getValue());" here I cant stop MediaPlayer with onpause and onstop overrides.\\\ 


     ImageButton button = (ImageButton) findViewById(entry.getKey()); 
     button.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       mp.start(); 
      } 

     }); 
    } 
} 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     if(mp.isPlaying()){ 
      mp.stop(); 
      mp.release(); 
     } 
    } 

    @Override 
    public void onDestroy(){ 
    super.onDestroy(); 
     mp.release(); 
    } 

} 
+1

您面臨的問題是什麼? – MByD 2011-04-05 03:22:50

+0

@MByD 林不知道如何說話,因爲我還是很新,但如果。如果我把「MediaPlayer mp;」活動之後,但在「創建」之前,我只能播放我的許多聲音之一。如果我在「oncreate」之後放置「final MediaPlayer mp」,則在應用程序關閉後繼續播放。我試圖讓它工作在兩種方式,所以所有的聲音工作,所以我可以暫停/停止/釋放,如果應用程序移動到背景。哦,謝謝你的幫助,在我上一篇文章中,我一直在這裏工作幾個小時。 – Colby 2011-04-05 03:44:14

回答

2

正如我在你的previous question建議,不要創建所有的媒體播放器的情況下,有兩個原因:

  1. 你失去所有實例,只有最後一個。總是。
  2. onCreate()成爲無緣由的非常長的方法。

相反,從刪除mp = MediaPlayer.create(this, entry.getValue()); for循環,並將其移動到你的聽衆裏面,類似的東西(未測試...):

button.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
      int sound = map.get(v.getId()); 
      mp = MediaPlayer.create(main.this, sound); 
      mp.start(); 
     } 
    }); 

所以,你只會創建的媒體播放器實例需要的時候。

順便說一句,主要是不是一個班的好名字。

+0

好吧,我明白你的意思了!起初我沒有聽清楚。我現在就去做。謝謝你對此的所有幫助。 – Colby 2011-04-05 03:59:46

+0

@Colby - 你不應該聲明它是'最後' – MByD 2011-04-05 04:19:37

+0

這麼近就會殺了我。大聲笑 我遇到了「mp = MediaPlayer行」的問題 mp = MediaPlayer.create(this,sound); (新的View.OnClickListener(){},int)「 error =」MediaPlayer類型中的create(Context,int)方法不適用於參數(新的View.OnClickListener(){},int) ; error =最後的局部變量mp不能被分配,因爲它是在封閉類型中定義 – Colby 2011-04-05 04:25:02