MediaPlayer和地图问题Android应用程序(noob问题)

时间:2011-04-05 03:15:26

标签: android map media-player

我刚刚在这里学习。我正在尝试用大约四十种声音制作一个音板,但是我在使用maphash如何使它工作时遇到了一些麻烦。谁能救我?

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

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 个答案:

答案 0 :(得分:2)

正如我在previous question中建议的那样,不要创建所有这些媒体播放器实例,原因有两个:

  1. 您丢失所有实例并且只有最后一个实例。总是。
  2. onCreate()无缘无故变得很长。
  3. 相反,从你的for循环中移除mp = MediaPlayer.create(this, entry.getValue());,并将其移动到你的监听器内部,就像那样(未经测试......):

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

    因此,您只能在需要时创建媒体播放器实例。

    顺便说一句,主要不是一个好名字。