【问题标题】:How to play tapped List Item Song如何播放轻敲的列表项歌曲
【发布时间】:2014-10-28 07:14:43
【问题描述】:

我正在使用 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);
   }

【问题讨论】:

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


    【解决方案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();
                }
    
            }
    

    【讨论】:

      【解决方案2】:

      这是因为您从不为当前正在播放的歌曲调用 mediaPlayer.stop()。

      【讨论】:

      • 那么我该如何控制它来播放新歌呢?
      • 使用某些事件处理程序停止媒体播放器播放当前正在播放的歌曲,然后开始播放新歌曲。
      猜你喜欢
      • 2012-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多