2012-03-14 68 views
0

如何創建一個線程,每秒鐘檢查歌曲位置並根據歌曲位置移動seekbar?我使用的是下面的編碼,這不是work.in這個代碼搜索欄的工作非常首歌如何使用android媒體播放器的seekbar中的線程

public void onFinish() { 

     seconds.setVisibility(View.GONE); 
     // media Player 
     Bundle b = getIntent().getExtras(); 
     final ArrayList plsong = new ArrayList(b.getCharSequenceArrayList("song")); 
     final ArrayList soname = new ArrayList(b.getCharSequenceArrayList("songname")); 
     int i = 0; 
     // media player load 

     int index = 0; 

     sname.setText((CharSequence) soname.get(i)); 
     Log.i("MP : ", plsong.get(i).toString()); 

     mp = MediaPlayer.create(player.this, (Integer) plsong.get(i)); 
     seekbar.setProgress(0); 
     total = mp.getDuration(); 
     mp.start(); 
     seekbar.setMax(total); 
     ct.start(); 
     seekbar.setOnSeekBarChangeListener(new seekbarchange()); 

     mp.setOnCompletionListener(new OnCompletionListener() { 

      public void onCompletion(MediaPlayer player) { 

       Thread ct1=new Thread(); 
       mp.release(); 
       sname.setText(" "); 
       if (j < (plsong.size() - 1)) { 
        j++; 
        mp = MediaPlayer.create(player.this,(Integer) plsong.get(j)); 
        seekbar.setProgress(0); 
        total = mp.getDuration(); 
        sname.setText((CharSequence) soname.get(j)); 
        seekbar.setMax(total); 
        seekbar.setOnSeekBarChangeListener(new seekbarchange()); 
        mp.start(); 
        ct1.start(); 
        mp.setOnCompletionListener(this); 




       } 
      } 
     }); 
     // seekbar progress 


    } 

    public void onTick(long millisUntilFinished) { 

     seconds.setText((millisUntilFinished/1000) + ""); 
     System.out.println("Timer : " + (millisUntilFinished/1000)); 

    } 
    Thread ct = new Thread(this); 

    public void run() { 
     // TODO Auto-generated method stub 
     try { 
      while(mp != null){ 
       int currentPosition = mp.getCurrentPosition(); 
       Message msg = new Message(); 
       msg.what = currentPosition; 
       threadHandler.sendMessage(msg); 
      } 
      Thread.sleep(100); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
    private Handler threadHandler = new Handler() { 
     public void handleMessage(Message msg) { 
      seekbar.setProgress(msg.what); 
     } 
    }; 

} 

回答

1

這是運行的線程有一次,我在一個音樂播放器,我做了聲明。工作得很好。希望能幫助到你。

new Thread(new Runnable() { 
     @Override 
     public void run() { 
      int currentPosition = 0; 
      while (!musicThreadFinished) { 
       try { 
        Thread.sleep(1000); 
        currentPosition = getCurrentPosition(); 
       } catch (InterruptedException e) { 
        return; 
       } catch (Exception e) { 
        return; 
       } 
       final int total = getDuration(); //gets the duration of music file 

       final String totalTime = getAsTime(total);//converts it to 
       final String curTime = getAsTime(currentPosition); 

       musicSeekBar.setMax(total); 
       musicSeekBar.setProgress(currentPosition); 
       musicSeekBar.setSecondaryProgress(getBufferPercentage()); 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         if (isPlaying()) { 
          if (!playPauseButton.isChecked()) { 
           playPauseButton.setChecked(true); 
          } 
         } else { 
          if (playPauseButton.isChecked()) { 
           playPauseButton.setChecked(false); 
          } 
         } 
         musicDuration.setText(totalTime); 
         musicCurLoc.setText(curTime); 
        } 
       }); 

      } 
     } 
    }).start(); 
+0

感謝u..Where我在我的代碼 – Palaniraja 2012-03-14 12:16:18

+0

使用這個方法裏面oncreate。 – 2012-03-14 12:18:19

1

我認爲這是你需要的線程... 我使用進度條在這裏,而不是搜索條..

new Thread(new Runnable() { 
      public void run() { 
       try { 
       Thread.sleep(2000); 
      } catch (InterruptedException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
      while (mp!=null) { 
       final int progressBarStatus = doSomeTasks(); 


       try { 
       Thread.sleep(1000); 
       } catch (InterruptedException e) { 
       e.printStackTrace(); 
       } 


       progressBarHandler.post(new Runnable() { 
       public void run() { 
        p.setProgress(progressBarStatus); 
       } 
       }); 

      if (progressBarStatus >= 100) { 


       try { 
        Thread.sleep(2000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 


      } 
      }} 
      }).start(); 
} 

private int doSomeTasks(){ 
    if(mp!=null){ 
     int i=mp.getCurrentPosition(); 
    int t=mp.getDuration(); 
    if(t!=0){ 
    int d=(i*100)/t; 

    return d;} 
    else return 0; 

    } 
    return 0; 

}