过去三周我一直在安装Android媒体播放器。我正在尝试找到一种解决方案,让我可以让我的媒体播放器在播放歌曲时更改歌曲。
以下是Listener
RecyclerView
musicList.addOnItemTouchListener(
new RecyclerItemClickListener(getApplicationContext(), new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, final int position) {
currentPosition = position;
if(!mediaPlayer.isPlaying()){
musicThread.start();
} else {
mediaPlayer.reset();
}
}
})
);
}
我的Thread
是这样的:
final Thread musicThread = new Thread(new Runnable(){
@Override
public void run() {
try {
URL = getMusicURL(myDataset[currentPosition]);
try {
mediaPlayer.setDataSource(URL);
//mediaPlayer.prepare(); // might take long! (for buffering, etc)
mediaPlayer.prepareAsync(); // prepare async to not block main thread
} catch (IOException e) {
e.printStackTrace();
Log.i("TEST","Eroare: "+e.getMessage());
}
} catch (StorageApiException e) {
e.printStackTrace();
Log.i("TEST","Eroare: "+e.getMessage());
}
}
});
答案 0 :(得分:1)
我觉得你有一团糟。首先,你不需要一个线程来播放音乐,当你拨打mediaPlayer.start()
时,自己的媒体播放器API会为你做。但是,如果您要播放在线音乐,则必须关注准备数据源所需的时间。为此,只需使用mediaPlayer.prepareAsync()
并注册回调即可。完成准备后,您可以自动开始播放或做任何您想做的事情。
如果要更改数据源,只需按照MediaPlayer文档中的自动机映射进行操作即可。基本上,当用户选择另一个曲目时,您在按钮监听器中注册该呼叫,然后重置mediaPlayer,并再次调用所有准备,开始...循环。顺便说一下,建议将所有媒体播放器代码部署到服务中,以便即使用户已关闭您的活动,它也可以继续播放。