在androidStudio中使用MediaPlayer从列表中播放随机歌曲?

时间:2015-08-05 17:38:28

标签: android android-studio

所以,这就是事情。我正在关注新波士顿教程,为活动添加背景音乐。但后来我想,如果我可以添加一个歌曲列表,然后使用随机数来播放背景列表中的歌曲,那就太好了。现在,它工作,但这是事情,我按两次播放按钮后,它给我这个错误信息(图像下面附红色),我无法理解错误信息的含义。任何人都可以建议我如何解决错误?

package com.example.user.testapp5;

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

import java.util.Random;

import static com.example.user.testapp5.R.raw.u;

public class MainActivity extends Activity {

    Button b1,b2;
    TextView t1;

    MediaPlayer [] s = new MediaPlayer[2];
    int n;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        s[0] = MediaPlayer.create(MainActivity.this,R.raw.u);
        s[1] = MediaPlayer.create(MainActivity.this,R.raw.k);

        b1 = (Button)findViewById(R.id.display);//start button to play the song
        b2 = (Button)findViewById(R.id.Sbutton);//stop button to stop the song

        t1 = (TextView)findViewById(R.id.Tdisplay);

        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                t1.setText("Hey Welcome");
                t1.setTextColor(Color.BLUE);
                t1.setTextSize(10);

                for(int i =0 ;i<1;i++)
                {
                    Random r = new Random();
                    n = r.nextInt(2);

                    s[n].start();



                }
            }
        });


        b2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                s[n].stop();

            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, 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();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

enter image description here

1 个答案:

答案 0 :(得分:1)

这是因为媒体播放器尚未准备好播放您的歌曲。在为Media Player实例设置数据源之后,您应该在准备好媒体播放器时立即调用player.prepareAsync();,将执行onPrepared方法。在此方法中,开始播放:

@Override
public void onPrepared(MediaPlayer mp) {
//start playback
mp.start();
}

完成任务后,您应该释放所有资源,例如:

 player.stop();
 player.release();

为避免多首歌曲与同一媒体播放器实例同时播放,我建议创建一次只能返回一个实例的单例类。 如果您正在使用服务进行背景歌曲播放,我建议您按照本教程进行操作: - http://code.tutsplus.com/tutorials/create-a-music-player-on-android-song-playback--mobile-22778
希望这会对你有所帮助!!!