2012-03-14 12 views
0

1秒ごとに曲の位置を確認し、曲の位置に基づいてシークバーを移動するスレッドを作成する方法は?私は、それはバーが、これは私がかつて私が作った音楽プレーヤーで宣言された実行可能なスレッドであるような非常に最初の曲android mediaplayerで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

を働い求め、このコードをwork.inいないコーディングの下にあります使用しました。うまく働いた。それが役に立てば幸い。

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

は私が内部の私のコード – Palaniraja

+0

にこの方法を使用u..Whereに感謝..私が代わりにシークバーのここでのプログレスバーを使用しています ...これはあなたが必要とするスレッドだと思いますoncreate。 –

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; 

} 
関連する問題