如何播放被点击的列表项目歌曲

时间:2014-10-28 07:14:43

标签: android android-listview mp3 android-mediaplayer mediacontroller

我正在使用listview并在屏幕底部使用媒体控制器,当我点击任何一个列表项时,第一次我能够播放那首歌,但之后当我点击时另一个列表项,它没有播放那些音乐(我的意思是不停止存在而不是开始新音乐)

   listview.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                long id) {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), actorsList.get(position).getUrl(), Toast.LENGTH_LONG).show();
            strTitle = actorsList.get(position).getTitle().toString();
            textAudioTitle.setText(strTitle);
            strURL = actorsList.get(position).getUrl().toString();
        }
    });


     public void play(){           
       mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        try {
            mediaPlayer.setDataSource(strURL);
        } catch (IllegalArgumentException e) {

        } catch (SecurityException e) {

        } catch (IllegalStateException e) {

        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            mediaPlayer.prepare();
        } catch (IllegalStateException e) {

        } catch (IOException e) {

        }
        mediaPlayer.start();
      finalTime = mediaPlayer.getDuration();
      startTime = mediaPlayer.getCurrentPosition();
      if(oneTimeOnly == 0){
         seekbar.setMax((int) finalTime);
         oneTimeOnly = 1;
      } 

      endTimeField.setText(String.format("%d : %d", 
         TimeUnit.MILLISECONDS.toMinutes((long) finalTime),
         TimeUnit.MILLISECONDS.toSeconds((long) finalTime) - 
         TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.
         toMinutes((long) finalTime)))
      );
      startTimeField.setText(String.format("%d : %d", 
         TimeUnit.MILLISECONDS.toMinutes((long) startTime),
         TimeUnit.MILLISECONDS.toSeconds((long) startTime) - 
         TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.
         toMinutes((long) startTime)))
      );
      seekbar.setProgress((int)startTime);
      myHandler.postDelayed(UpdateSongTime,100);

      btnPlay.setVisibility(View.GONE);
      btnPause.setVisibility(View.VISIBLE);
   }

   private Runnable UpdateSongTime = new Runnable() {
      public void run() {
         startTime = mediaPlayer.getCurrentPosition();
         startTimeField.setText(String.format("%d : %d", 
            TimeUnit.MILLISECONDS.toMinutes((long) startTime),
            TimeUnit.MILLISECONDS.toSeconds((long) startTime) - 
            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.
            toMinutes((long) startTime)))
         );
         seekbar.setProgress((int)startTime);
         myHandler.postDelayed(this, 100);
      }
   };
   public void pause(){       
      mediaPlayer.pause();
      btnPlay.setVisibility(View.VISIBLE);
      btnPause.setVisibility(View.GONE);
   }

2 个答案:

答案 0 :(得分:1)

如果媒体在ItemClick

上播放,您需要停止播放
@Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                long id) {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), actorsList.get(position).getUrl(), Toast.LENGTH_LONG).show();
            strTitle = actorsList.get(position).getTitle().toString();
            textAudioTitle.setText(strTitle);
            strURL = actorsList.get(position).getUrl().toString();

            if(mediaPlayer!=null && mediaPlayer.isPlaying())
            {
                mediaPlayer.stop();
            }

        }

答案 1 :(得分:0)

这是因为你永远不会为正在播放的当前歌曲调用mediaPlayer.stop()。