播放选定的音乐作为游戏的背景音乐
问题描述:
我想为Android制作游戏,用户从其库中选择音乐,然后在游戏运行时播放背景,直至失败。播放选定的音乐作为游戏的背景音乐
这是我的代码,它播放歌曲时,它的选择,但它并没有继续玩时,我按OK按钮
public class MainActivity extends AppCompatActivity {
MediaPlayer mp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button openFile = (Button) this.findViewById(R.id.openFile);
openFile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, 10);
}
});
Button play = (Button) this.findViewById(R.id.button2);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_OK && requestCode == 10){
Uri uriSound=data.getData();
play(this, uriSound);
}
}
private void play(Context context, Uri uri) {
try {
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(context, uri);
mp.start();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
答
代码问题是你在玩家准备好之前就开始做了,看看这张图
private void play(Context context, Uri uri) {
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(context, uri);
mp.prepareAsync();
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start();
}
});
}}
尝试这样的事情。
答
我想你忘了执行播放按钮的OnClickListener。
Button play = (Button) this.findViewById(R.id.button2);
play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
play(this, uriSound);
}
});
为了得到urisound,它在onActivityResult本地变量转换为类MainActivity的领域
private Uri uriSound;
不要忘记改变onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_OK && requestCode == 10){
uriSound=data.getData();
play(this, uriSound);
}
}
+0
谢谢你的回答!这解决了我保存歌曲路线的问题,但是当我按下播放按钮时它仍然不播放。 – PunishedSky
我试过但仍不播放音乐,也许它可能与上下文有关? – PunishedSky
我不这么认为,如果是这样的话,它会说上下文为null,请尝试在MediaPlayer.create(...)行后添加此行=> player .prepareAsync(); – yanivtwin
它似乎不执行什么内置的onPrepared – PunishedSky