万书网 > 文学作品 > Android从入门到精通 > 第120页

第120页





Button  next  =  (Button)  findViewById(R.id.next);  //获取“下一首”按钮



audioList();  //使用ListView组件显示SD卡上的全部音频文件

(4)编写audioList()方法,用于使用ListView组件显示SD卡上的全部音频文件。在该方法中,首先调用getFiles()方法获取SD卡上的全部音频文件,然后创建一个适配器,并获取布局管理器中添加的ListView组件,再将适配器与ListView关联,最后为ListView添加列表项单击事件监听器,用于当用户单击列表项时播放音乐。audioList()方法的具体代码如下:

private  void  audioList()  {



getFiles("/sdcard/");  //获取SD卡上的全部音频文件



ArrayAdapter  adapter  =  new  ArrayAdapter(this,



android.R.layout.simple_list_item_1,  audioList);  //创建一个适配器



ListView  listview  =  (ListView)  findViewById(R.id.list);  //获取布局管理器中添加的ListView组件



listview.setAdapter(adapter);  //将适配器与ListView关联



//当单击列表项时播放音乐



listview.setOnItemClickListener(new  OnItemClickListener()  {



@Override



public  void  onItemClick(AdapterView  listView,  View  view,int  position,  long  id)  {



currentItem  =  position;  //将当前列表项的索引值赋值给currentItem



playMusic(audioList.get(currentItem));  //调用playMusic()方法播放音乐



}



});



}

(5)定义一个保存合法的音频文件格式的字符串数组,并编写根据文件路径判断文件是否为音频文件的方法,具体代码如下:

private  static  String[]  imageFormatSet  =  new  String[]  {  "mp3",  "wav",  "3gp"  };  //合法的音频文件格式



//判断是否为音频文件



private  static  boolean  isAudioFile(String  path)  {



for  (String  format  :  imageFormatSet)  {  //遍历数组



if  (path.contains(format))  {  //判断是否为合法的音频文件



return  true;



}



}



return  false;



}

(6)编写getFiles()方法,用于通过递归调用的方式获取SD卡上的全部音频文件,具体代码如下:

private  void  getFiles(String  url)  {



File  files  =  new  File(url);  //创建文件对象



File[]  file  =  files.listFiles();



try  {



for  (File  f  :  file)  {  //通过for循环遍历获取到的文件数组



if  (f.isDirectory())  {  //如果是目录,也就是文件夹



getFiles(f.getAbsolutePath());  //递归调用



}  else  {



if  (isAudioFile(f.getPath()))  {  //如果是音频文件



audioList.add(f.getPath());  //将文件的路径添加到List集合中



}



}



}



}  catch  (Exception  e)  {



e.printStackTrace();  //输出异常信息



}



}

(7)编写用于播放音乐的方法playMusic(),在该方法中,首先判断是否正在播放音乐,如果正在播放音乐,先停止播放,然后重置MediaPlayer,并指定要播放的音频文件,再预加载该音频文件,最后播放音频,并设置“暂停”按钮的显示文字及可用状态。playMusic()方法的具体代码如下:

void  playMusic(String  path)  {



try  {



if  (mediaPlayer.isPlaying())  {



mediaPlayer.stop();  //停止当前音频的播放



}



mediaPlayer.reset();  //重置MediaPlayer



mediaPlayer.setDataSource(path);  //指定要播放的音频文件



mediaPlayer.prepare();  //预加载音频文件



mediaPlayer.start();  //播放音频



pause.setText("暂停");



pause.setEnabled(true);  //设置“暂停”按钮可用



}  catch  (Exception  e)  {



e.printStackTrace();



}



}

(8)编写实现“下一首”功能的方法nextMusic(),在该方法中,首先计算要播放音频的索引,然后调用playMusic()播放音乐。nextMusic()方法的具体代码如下:

void  nextMusic()  {



if  (++currentItem  >=  audioList.size())  {//当对currentItem进行+1操作后,如果其值大于等于音频文件的总数



currentItem  =  0;



}



playMusic(audioList.get(currentItem));  //调用playMusic()方法播放音乐



}

(9)编写实现“上一首”功能的方法preMusic(),在该方法中,首先计算要播放音频的索引,然后调用playMusic()播放音乐。preMusic()方法的具体代码如下:

void  preMusic()  {



if  (--currentItem  >=  0)  {  //当对currentItem进行-1操作后,如果其值大于等于0



if  (currentItem  >=  audioList.size())  {  //如果currentItem的值大于等于音频文件的总数



currentItem  =  0;



}



}  else  {



currentItem  =  audioList.size()  -  1;  //currentItem的值设置为音频文件总数-1



}



playMusic(audioList.get(currentItem));  //调用playMusic()方法播放音乐