这是从音乐应用程序中打开选择器的 Intent
public void launchMusicPlayer(View view) {
Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i,1);
}
下面是onActivityResult代码来尝试获取歌曲 ,但问题是按下测试按钮时,不播放任何内容 由于我是编码新手,所以我不知道自己做错了什么。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == 1) {
final MediaPlayer testSong = new MediaPlayer();
Uri songUri = data.getData();
try {
testSong.setDataSource(this, songUri);
} catch (IOException e) {
e.printStackTrace();
}
testSong.prepareAsync();
test.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
testSong.start();
}
});
}
}
最佳答案
这个问题可能是因为 prepareAsync()
是异步的,所以当您调用 start()
时,MediaPlayer 可能还没有准备好。有两种方法可以解决此问题:
使用
prepare()
而不是prepareAsync()
test.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { testSong.prepare(); testSong.start(); } });
在
setOnPreparedListener()
中调用start()
方法test.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { testSong.prepareAsync(); testSong.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer player) { player.start(); } } });
请参阅此处的文档 http://developer.android.com/reference/android/media/MediaPlayer.html
关于Android - 如何从用户选择的歌曲创建 MediaPlayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31649584/