美好的一天!像往常一样 - 我开始学习Android编程,并且在尝试创建基本的MediaPlayer应用程序时遇到了意想不到的困难。音频文件存储在res / raw中。可以使用 create()访问它。我已经阅读了一些关于如何构建媒体播放器应用程序的手册,并确信如果文件存储在中,则无需使用 prepare()和 prepareAsync() res / raw文件夹。所以这是我的初始代码
private MediaPlayer playerM = new MediaPlayer();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button playButton = (Button) findViewById(R.id.playButton);
playButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
playMusic(R.raw.sleep_away);
}
});
Button stopButton = (Button) findViewById(R.id.pauseButton);
stopButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopMusic();
}
});
}
private void playMusic(int rid) {
playerM.create(this, rid);
playerM.start();
}
private void stopMusic() {
playerM.stop();
}
}
因为我做了很多改变,但没有任何帮助。根据MediaPlayer上的dev.android手册,上面的代码应该可行。但是会导致以下错误:
E/MediaPlayer: start called in state 1, mPlayer(0x0)
E/MediaPlayer: error (-38, 0)
E/MediaPlayer: Error (-38,0)
可能我只是犯了一些直言不讳的错误。任何帮助将不胜感激。
答案 0 :(得分:1)
由我自己解决
playButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try{
Uri myUri = Uri.parse("android.resource://" + v.getContext().getPackageName() + "/" + R.raw.sleep_away);
System.out.println(myUri);
playerM.setDataSource(v.getContext(), myUri);
playerM.prepare();
playerM.setOnPreparedListener(new MediaPlayer.OnPreparedListener(){
@Override
public void onPrepared(MediaPlayer playerM){
playerM.start();
}
});
}catch(IOException e){
e.printStackTrace();
}
}
});
我知道我应该添加其他方法来改变State,但主要目的是让它来播放文件。