如何使用播放,暂停和停止按钮播放不同的歌曲?

时间:2014-06-13 19:50:33

标签: android android-intent android-activity android-mediaplayer

我感兴趣的是我有一个播放,停止和暂停按钮。现在,我只能用这些按钮播放一首歌。

我想要做的是使用按钮提供各种各样的歌曲。

当有人点击他们想要收听的歌曲的按钮时,它会开始播放,但仍然可以通过相同的播放,暂停和停止按钮进行控制。

如果这是一个低级别的问题,请原谅我。我是Android新手。我已经做了很多搜索,我已经看过制作音响播放器的教程,但这不是我想要的。

public class SecondActivity extends ActionBarActivity implements OnClickListener {

    MediaPlayer mp, mp2;
    ImageButton play, pause, stop;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        play = (ImageButton) findViewById(R.id.playbutton);
        pause = (ImageButton) findViewById(R.id.pausebutton);
        stop = (ImageButton) findViewById(R.id.stopbutton);

        play.setOnClickListener(this);
        pause.setOnClickListener(this);
        stop.setOnClickListener(this);

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment()).commit();
            setupNavigationButton();
        }
    }

    public void onClick(View v) {
        switch(v.getId()) {
        case R.id.song1 : if(mp == null){
            mp = MediaPlayer.create(this, R.raw.joker);


        }
        mp.start();
        break;

        case R.id.playbutton : if(mp == null) {
            mp = MediaPlayer.create(this, R.raw.gorillaz);
        }
        mp.start();
        break;
        case R.id.pausebutton : mp.pause();break;
        case R.id.stopbutton : mp.stop(); mp = null;break;
        }
    }
    private void setupNavigationButton(){
        Button button = (Button) findViewById(R.id.back);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText( SecondActivity.this, "You Clicked it!", Toast.LENGTH_LONG).show();

                //startActivity(new Intent(MainActivity.this,SecondActivity.class));
                finish();

            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.second, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_second,
                    container, false);
            return rootView;
        }
    }





    }

这是我的代码,它运行。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

我相信您可以使用int[]数组实现此功能。例如:

int[] songList = {R.id.gorillaz, R.id.falloutboy, R.id.takingbacksunday, R.id.pink};

onCreate()和(例如)中定义此变量,如果您每次都想随机开始新歌,请替换

case R.id.playbutton : if(mp == null) {
        mp = MediaPlayer.create(this, R.raw.gorillaz);
    }
    mp.start();

case R.id.playbutton : mp = null;
    mp = MediaPlayer.create(this, songList[(int Math.random())%songList.length()]);
    mp.start();

其中(int Math.random())%songList.length()是一个函数,用于生成与songList数组一起使用的范围内的随机整数。

编辑:

基于评论,这是我的建议:

您需要一种方法来选择您想要播放的歌曲。我将为每首歌使用不同的按钮,但你也可以有一个微调器来选择歌曲并有一个播放/暂停/停止控制台。

为每首歌创建一个按钮。为每个类似的创建一个onClickListener,如:

button1.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        startSong(R.id.falloutboy); // Say this is Fall Out Boy's button
    }
}

其中startSong()的输入是与按钮关联的ID。 然后您的startSong(int res)方法是:

startSong(int res) {
    if(mp == null) {
        mp = MediaPlayer.create(this, res);
    } else {
        mp.stop; 
        mp = MediaPlayer.create(this, res);
        mp.start;
    }
}

在审核中,您将拥有1个媒体播放器,每个按钮调用一个方法,将参考ID传递给与该按钮相关联的歌曲,该方法将检查播放器是否已创建,如果已创建,则将其停止用新歌重新创作。因此,主要的暂停和停止按钮将影响同一个媒体播放器。

答案 1 :(得分:0)

    private MediaPlayer mp;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        MediaPlayer mp = new MediaPlayer();
        mp = MediaPlayer.create(this, R.raw.song1);
        mp.prepare();
    }
    public void onClick(View v) {
        switch(v.getId()) 
        {
        case R.id.song1: 
            if (mp != null)
            {
                mp.stop();
                mp.release();
            }
            mp = new MediaPlayer();
            mp = MediaPlayer.create(this, R.raw.song1);
            mp.prepare();
            break;
        case R.id.song2: 
            if (mp != null)
            {
                mp.stop();
                mp.release();
            }
            mp = new MediaPlayer();
            mp = MediaPlayer.create(this, R.raw.song2);
            mp.prepare();
            break;
        //...more songs
        case R.id.play_pause_button:
            if (mp != null)
            {
                if(mp.isPlaying())
                {
                    mp.pause();
                    ((Button)v).setText("Play");
                }
                else
                {
                    mp.start();
                    ((Button)v).setText("Pause");
                }
            }
            break;
        case R.id.stopbutton: 
            if (mp != null)
            {
              mp.stop(); 
              mp.release();
              mp = null;
            }
            break;
        }
    }