【发布时间】:2020-12-20 06:21:08
【问题描述】:
我有一个类可以播放位于某些文件夹中的音频文件...问题是我无法仅使用媒体播放器的一个实例来播放多个音频文件。每次我尝试播放不同的歌曲时,都会创建一个新的 Media Class 实例,并且新歌曲与前一首歌曲并行播放,这真的很烦人......谁能帮我只使用一个 Media Payer 实例来像在普通音频播放器中一样一首一首地播放不同的歌曲
//The files are listed as an array into a ListView, so i added a ListView.OnItemClickListener to play that location which the user has selected
ListView audiolist=(ListView)findViewById(R.id.audiolist);
audiolist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if(position==id){
File mypath=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
String mystring=(String)audiolist.getItemAtPosition(position);
if(mystring.contains(".mp3")) {
File myfile = new File(mypath.toString(), "/" + mystring);
Uri newuri = Uri.fromFile(myfile);
//I think this line is the one creating the mutiple instances of the MediaPayer
mp=new MediaPlayer();
mp.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
mp.setAudioAttributes(
new AudioAttributes.Builder().setContentType(AudioAttributes.CONTENT_TYPE_MUSIC).setUsage(AudioAttributes.USAGE_MEDIA)
.build()
);
try {
mp.setDataSource(getApplicationContext(),newuri);
mp.setDisplay(holder);
mp.prepare();
mp.setOnBufferingUpdateListener(Audio_Player.this);
mycontroller=new MediaController(Audio_Player.this);
mycontroller.setMediaPlayer(Audio_Player.this);
mp.start();
} catch (IOException e) {
e.printStackTrace();
}
}//end of if
});//end of listview method
【问题讨论】: