2011-04-05 55 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