2012-10-17 25 views
0

在我的應用程序中,我試圖實現SeekBar .. SeekBar在第一次播放聲音時工作正常。但是當我點擊按鈕再次播放聲音時,我是一個無盡的關於MediaPlayer的錯誤循環。我想要的是,當我在播放聲音時,如果我點擊播放按鈕,聲音應該從頭再播放一遍,SeekBar也應該從頭開始播放。如果我刪除了SeekBar,那麼一切工作正常..但SeekBar必須在我的應用程序..我已經在BaseAdapter中實現所有這些東西..我必須做的所有事情在BaseAdapter。所以,請幫助我,讓我與BaseAdapter工作的代碼..在BaseAdapter中實現Android中的SeekBar

這是我的代碼...請看看...

mediaPlayer.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Toast.makeText(activity, "Loading Message", Toast.LENGTH_LONG).show(); 

       mp.reset(); 
       try { 
        mp.setDataSource("url for any mp3 audio file"); 
       } catch (IllegalArgumentException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IllegalStateException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       mp.prepareAsync(); 
       mp.setOnPreparedListener(new OnPreparedListener() { 

        public void onPrepared(final MediaPlayer mp) { 
         // TODO Auto-generated method stub 
         mp.start(); 
         mediaPlayer.setBackgroundResource(R.drawable.m_pause); 
         seekBar.setProgress(0); 
         seekBar.setMax(100); 
         mUpdateTimeTask = new Thread(new Runnable() { 

          public void run() { 
           // TODO Auto-generated method stub 
           try { 
            Thread.sleep(100); 
           } catch (InterruptedException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
           } 
           long totalDuration = mp.getDuration(); 
            long currentDuration = mp.getCurrentPosition(); 
            int progress = (int)(utils.getProgressPercentage(currentDuration, totalDuration)); 
            seekBar.setProgress(progress); 
            mHandler.post(this); 
          } 
         }); 
         mUpdateTimeTask.start(); 
        } 
       }); 
      } 
     }); 
     mp.setOnCompletionListener(new OnCompletionListener() { 

      public void onCompletion(MediaPlayer mp) { 
       // TODO Auto-generated method stub 
       mediaPlayer.setBackgroundResource(R.drawable.m_play); 
       mp.stop(); 
       try { 
        mUpdateTimeTask.join(); 
        mHandler.sendEmptyMessage(0); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       mHandler.removeCallbacks(mUpdateTimeTask); 
      } 
     }); 
     seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 

      public void onStopTrackingTouch(final SeekBar seekBar) { 
       // TODO Auto-generated method stub 
       //mHandler.removeCallbacks(mUpdateTimeTask); 
       if(mp.isPlaying()) 
       { 
        int totalDuration = mp.getDuration(); 
        int currentPosition = utils.progressToTimer(seekBar.getProgress(), totalDuration); 
        mp.seekTo(currentPosition); 
        mUpdateTimeTask = new Thread(new Runnable() { 

         public void run() { 
          // TODO Auto-generated method stub 
          try { 
           Thread.sleep(100); 
          } catch (InterruptedException e) { 
           // TODO Auto-generated catch block 
           e.printStackTrace(); 
          } 
          long totalDuration = mp.getDuration(); 
           long currentDuration = mp.getCurrentPosition(); 
           int progress = (int)(utils.getProgressPercentage(currentDuration, totalDuration)); 
           //timer.setText(""+utils.milliSecondsToTimer(currentDuration)); 
           seekBar.setProgress(progress); 
           mHandler.post(this); 
         } 
        }); 
        mUpdateTimeTask.start(); 
       } 
       else 
       { 
        seekBar.setProgress(0); 
       } 
      } 

      public void onStartTrackingTouch(SeekBar seekBar) { 
       // TODO Auto-generated method stub 
       if(mp.isPlaying()) 
       { 
        mHandler.removeCallbacks(mUpdateTimeTask); 
       } 
       else 
       { 
        seekBar.setProgress(0); 
       } 
      } 

      public void onProgressChanged(SeekBar seekBar, int progress, 
        boolean fromUser) { 
       // TODO Auto-generated method stub 

      } 
     }); 
     mp.setOnErrorListener(new OnErrorListener() { 

      public boolean onError(MediaPlayer mp, int what, int extra) { 
       // TODO Auto-generated method stub 
       return false; 
      } 
     }); 

謝謝...

回答

0

創建您的BaseAdapter的方法,其將當前的SeekBarProgress零

void setSeekBarValuetoZero(){ 
    seekBar.setProgress(0); 
} 

首先請檢查該搜索條被初始化。 您可以在mp.reset()之前從yourMediaPlayer類調用此函數。

+0

我已經創建了該方法並在mp.reset()之前調用它。但沒有任何反應..我仍然面臨無盡的錯誤... –

+0

你在哪裏添加聲音?它在哪裏進入無盡循環? –

+0

在logcat我得到無盡的錯誤....我在mp.setDataSource()中添加聲音; –