2013-04-22 39 views
5

Tôi đang cố gắng tạo nội dung nào đó trong đó một tệp âm thanh được phát và có thể bị tạm dừng và thao tác với thanh tiến trình/tìm kiếm. Tôi muốn có một hình ảnh chiếm phần lớn màn hình và sau đó là nút tạm dừng phát ở phía dưới bên trái và thanh ở bên phải của nút. Mọi thứ đều hoạt động trên thanh tìm kiếm không liên kết đến âm thanh. Mã vạch tiến trình của tôi có thể là một mớ hỗn độn bởi vì nếu lấy nó từ một số tôi đã thấy trên internet nhưng họ chủ yếu là khó hiểu đối với tôi vì chúng dành cho các ứng dụng nghe nhạc không phải để phát một tệp âm thanh duy nhất.Android Audio SeekBar

Ai đó có thể giúp tôi với thanh tiến trình không? Bất kỳ lời khuyên nào khác về cải thiện lập trình của tôi cũng sẽ tuyệt vời.

(Tôi rất mới để android và lập trình chỉ để cảnh báo bạn)

Đây là Java của tôi:

MediaPlayer mediaPlayer; 
    Button buttonPlayPause; 
    ImageView Image; 
    SeekBar seekBar; 

    private int stateMediaPlayer; 
    private final int stateMP_NotStarter = 0; 
    private final int stateMP_Playing = 1; 
    private final int stateMP_Pausing = 2; 
    int total; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.playerwere); 

     Image = (ImageView) findViewById(R.id.pdfview); 
     Image.setImageResource(R.drawable.wereim); 

     seekBar = (SeekBar) findViewById(R.id.seekBar); 

     buttonPlayPause = (Button) findViewById(R.id.playpause); 

     buttonPlayPause.setOnClickListener(buttonPlayPauseOnClickListener); 

     seekBar.setOnSeekBarChangeListener(seekBarOnSeekListener); 

     initMediaPlayer(); 

     Thread currentThread = new Thread(this); 
     currentThread.start(); 

    } 

    private void initMediaPlayer() { 
     mediaPlayer = new MediaPlayer(); 
     mediaPlayer = MediaPlayer.create(were.this, R.raw.were); 
     stateMediaPlayer = stateMP_NotStarter; 

     mediaPlayer.setOnPreparedListener(new OnPreparedListener() { 

      @Override 
      public void onPrepared(MediaPlayer arg0) { 
       // TODO Auto-generated method stub 
       total = mediaPlayer.getDuration(); 
      } 

     }); 

     seekBar.setProgress(0); 
     seekBar.setMax(total); 
    } 

    Button.OnClickListener buttonPlayPauseOnClickListener = new Button.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      switch (stateMediaPlayer) { 
      case stateMP_NotStarter: 
       mediaPlayer.start(); 
    buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_pause); 
       stateMediaPlayer = stateMP_Playing; 
       break; 
      case stateMP_Playing: 
       mediaPlayer.pause(); 
    buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_play); 
       stateMediaPlayer = stateMP_Pausing; 
       break; 
      case stateMP_Pausing: 
       mediaPlayer.start(); 
    buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_pause); 
       stateMediaPlayer = stateMP_Playing; 
       break; 
      } 

     } 
    }; 

    SeekBar.OnSeekBarChangeListener seekBarOnSeekListener = new SeekBar.OnSeekBarChangeListener() { 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 
      // TODO Auto-generated method stub 

     } 

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

      if (fromUser) { 
       mediaPlayer.seekTo(progress); 
       seekBar.setProgress(progress); 
      } 

     } 
    }; 

    @Override 
    public void run() { 
     // TODO Auto-generated method stub 

     try { 
      while (mediaPlayer != null) { 
       int currentPosition = mediaPlayer.getCurrentPosition(); 
       Message msg = new Message(); 
       msg.what = currentPosition; 
       threadHandler.sendMessage(msg); 
      } 
      Thread.sleep(100); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 

    private Handler threadHandler = new Handler() { 
     public void handleMessage(Message msg) { 
      seekBar.setProgress(msg.what); 
     } 
    }; 

Và đây là những gì java của tôi là trước khi tôi cố gắng sử dụng seekBar:

MediaPlayer mediaPlayer; 
    Button buttonPlayPause; 
    ImageView Image; 

    private int stateMediaPlayer; 
    private final int stateMP_NotStarter = 0; 
    private final int stateMP_Playing = 1; 
    private final int stateMP_Pausing = 2; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.playerwere); 

     Image = (ImageView) findViewById(R.id.pdfview); 
     Image.setImageResource(R.drawable.wereim); 

     buttonPlayPause = (Button) findViewById(R.id.playpause); 

     buttonPlayPause.setOnClickListener(buttonPlayPauseOnClickListener); 

     initMediaPlayer(); 

    } 

    private void initMediaPlayer() { 
     mediaPlayer = new MediaPlayer(); 
     mediaPlayer = MediaPlayer.create(were.this, R.raw.were); 
     stateMediaPlayer = stateMP_NotStarter; 
    } 

    Button.OnClickListener buttonPlayPauseOnClickListener = new Button.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      switch (stateMediaPlayer) { 
      case stateMP_NotStarter: 
       mediaPlayer.start(); 
    buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_pause); 
       stateMediaPlayer = stateMP_Playing; 
       break; 
      case stateMP_Playing: 
       mediaPlayer.pause(); 
    buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_play); 
       stateMediaPlayer = stateMP_Pausing; 
       break; 
      case stateMP_Pausing: 
       mediaPlayer.start(); 
    buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_pause); 
       stateMediaPlayer = stateMP_Playing; 
       break; 
      } 

     } 
    }; 

Đây là java của tôi sau khi trả lời Vishal Vaja của:

MediaPlayer mediaPlayer; 
    Button buttonPlayPause; 
    ImageView Image; 
    SeekBar seekBar; 
    Handler handler; 

    private int stateMediaPlayer; 
    private final int stateMP_NotStarter = 0; 
    private final int stateMP_Playing = 1; 
    private final int stateMP_Pausing = 2; 
    private int mediaPos; 
    private int mediaMax; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.playerwere); 

     Image = (ImageView) findViewById(R.id.pdfview); 

     Image.setImageResource(R.drawable.wereim); 

     seekBar = (SeekBar) findViewById(R.id.seekBar); 

     buttonPlayPause = (Button) findViewById(R.id.playpause); 

     buttonPlayPause.setOnClickListener(buttonPlayPauseOnClickListener); 

     seekBar.setOnSeekBarChangeListener(seekBarOnSeekChangeListener); 

     initMediaPlayer(); 

    } 

    private void initMediaPlayer() { 
     handler = new Handler(); 
     mediaPlayer = new MediaPlayer(); 
     mediaPlayer = MediaPlayer.create(were.this, R.raw.were); 
     stateMediaPlayer = stateMP_NotStarter; 
     mediaPos = mediaPlayer.getCurrentPosition(); 

     mediaMax = mediaPlayer.getDuration(); 

     seekBar.setMax(mediaMax); // Set the Maximum range of the 
            // seekBar.setProgress(mediaPos);// set 
            // current progress to song's 

     handler.removeCallbacks(moveSeekBarThread); 
     handler.postDelayed(moveSeekBarThread, 100); 
    } 

    private Runnable moveSeekBarThread = new Runnable() { 

     public void run() { 
      if (mediaPlayer.isPlaying()) { 

       int mediaPos_new = mediaPlayer.getCurrentPosition(); 
       int mediaMax_new = mediaPlayer.getDuration(); 
       seekBar.setMax(mediaMax_new); 
       seekBar.setProgress(mediaPos_new); 

       handler.postDelayed(this, 100); // Looping the thread after 0.1 
               // second 
               // seconds 
      } 
     } 
    }; 

    Button.OnClickListener buttonPlayPauseOnClickListener = new Button.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      switch (stateMediaPlayer) { 
      case stateMP_NotStarter: 
       mediaPlayer.start(); 
       buttonPlayPause 
         .setBackgroundResource(android.R.drawable.ic_media_pause); 
       stateMediaPlayer = stateMP_Playing; 
       break; 
      case stateMP_Playing: 
       mediaPlayer.pause(); 
       buttonPlayPause 
         .setBackgroundResource(android.R.drawable.ic_media_play); 
       stateMediaPlayer = stateMP_Pausing; 
       break; 
      case stateMP_Pausing: 
       mediaPlayer.start(); 
       buttonPlayPause 
         .setBackgroundResource(android.R.drawable.ic_media_pause); 
       stateMediaPlayer = stateMP_Playing; 
       break; 
      } 

     } 
    }; 

    SeekBar.OnSeekBarChangeListener seekBarOnSeekChangeListener = new SeekBar.OnSeekBarChangeListener() { 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 
      // TODO Auto-generated method stub 

     } 

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

      if (fromUser) { 
       mediaPlayer.seekTo(progress); 
       seekBar.setProgress(progress); 
      } 

     } 
    }; 

Trả lời

3

Tôi nghĩ điều này có thể phù hợp với bạn.

Tạo một thread đó sẽ kiểm tra bài hát vị trí và sẽ di chuyển seekbar như thế này,

private Runnable moveSeekBarThread = new Runnable() { 

    public void run() { 
     if(mediaPlayer.isplaying){ 

     int mediaPos_new = mediaPlayer.getCurrentPosition(); 
     int mediaMax_new = mediaPlayer.getDuration(); 
     seekBar.setMax(mediaMax_new); 
     seekBar.setProgress(mediaPos_new); 

     handler.postDelayed(this, 100); //Looping the thread after 0.1 second 
             // seconds 
     } 
    } 
}; 

Và gọi đó là chủ đề như thế này,

mediaPos = mediaPlayer.getCurrentPosition(); 
    mediaMax = mediaPlayer.getDuration(); 

    seekBar.setMax(mediaMax); // Set the Maximum range of the 
    seekBar.setProgress(mediaPos);// set current progress to song's 

    handler.removeCallbacks(moveSeekBarThread); 
    handler.postDelayed(moveSeekBarThread, 100); 
+0

Ok, tôi đã cố gắng đó, nhưng tôi không nghĩ rằng tôi đã đặt nó ở vị trí đúng vì bây giờ khi các âm thanh được phát thanh vẫn không di chuyển nhưng nếu tôi di chuyển thanh tìm kiếm mà âm thanh tìm kiếm. Tôi đã đặt mã mới của mình trong câu hỏi gốc – user2305722

0

public class DetailMusic mở rộng cụ Hoạt động View.OnClickListener {

SeekBar seek_bar; 
Button play_button, pause_button; 
TextView text_shown; 
Handler seekHandler = new Handler(); 
Bundle bundle = new Bundle(); 
String Musicnames; 
int mediaMax; 
int mediaPos = 0; 
MediaPlayer mp = new MediaPlayer(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_detailmusic); 
    bundle = getIntent().getExtras(); 
    if (bundle != null) { 
     Musicnames = bundle.getString("musicnbames"); 
     System.out.println("++++++++++++++++++++++++++++++++" + Musicnames); 
     Log.e("musicfoldername", Musicnames); 
    } 
    seek_bar = (SeekBar) findViewById(R.id.seek_bar); 
    play_button = (Button) findViewById(R.id.play_button); 
    pause_button = (Button) findViewById(R.id.pause_button); 
    text_shown = (TextView) findViewById(R.id.text_shown); 
    play_button.setOnClickListener(this); 
    pause_button.setOnClickListener(this); 
    //seekUpdation(); 

    String PATH_TO_FILE = Musicnames; 
    // MediaPlayer mp = new MediaPlayer(); 
    try { 
     mp.setDataSource(PATH_TO_FILE); 
     mp.prepare(); 
    } catch (IOException e) { 

    } 
    mp.start(); 
    seek_bar.setMax(mp.getDuration()); 

    try { 
     mp.setDataSource(Musicnames); 
    } catch (IllegalArgumentException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (SecurityException 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(); 
    } 
    mediaPos = mp.getCurrentPosition(); 
    mediaMax = mp.getDuration(); 
    seek_bar.setMax(mediaMax); // Set the Maximum range of the 
    seek_bar.setProgress(mediaPos);// set current progress to song's 
    seekHandler.removeCallbacks(moveSeekBarThread); 
    seekHandler.postDelayed(moveSeekBarThread, 100); //cal the thread after 100 milliseconds 

} 

private Runnable moveSeekBarThread = new Runnable() { 
    public void run() { 
     if (mp.isPlaying()) { 
      int mediaPos_new = mp.getCurrentPosition(); 
      int mediaMax_new = mp.getDuration(); 
      seek_bar.setMax(mediaMax_new); 
      seek_bar.setProgress(mediaPos_new); 
      seekHandler.postDelayed(this, 100); //Looping the thread after 0.1 second 
     } 
    } 
}; 


@Override 
public void onClick(View view) { 
    switch (view.getId()) { 
     case R.id.play_button: 
      mp.reset(); 

// mp.start(); text_shown.setText ("Đang phát ...");

  break; 
     case R.id.pause_button: 
      mp.pause(); 
      text_shown.setText("Paused..."); 
    } 
} 

}

Các vấn đề liên quan