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