如何使用Android媒体播放器的进度条控制音频?

3

我能够使用Android媒体播放器播放音频文件。我可以显示进度条,并附加了2个按钮来暂停和播放音轨。我的问题是我无法使用进度条控制音轨。我希望播放的音轨根据我拖动进度条的位置进行更新。

以下是我的代码:

public class MyMediaPlayerView extends AppCompatActivity implements View.OnClickListener {

            /**
             * var for controller
             * restore timestamp today 12:11
             */
             SeekBar seek_bar;
             Button play_button, pause_button;
             MediaPlayer player;
             TextView text_shown;
             Handler seekHandler = new Handler();


            @Override
            protected void onCreate(Bundle savedInstanceState) {
                 super.onCreate(savedInstanceState);
                 setContentView(R.layout.activity_launch_webview);
                 getSupportActionBar().setDisplayHomeAsUpEnabled(true);

                 getInit();
                 seekUpdation();
             }

             Runnable run = new Runnable() {
                @Override public void run() {
                     seekUpdation();
                }
             };

             public void seekUpdation() {
                 seek_bar.setProgress(player.getCurrentPosition());
                 seekHandler.postDelayed(run, 1000);

                 onProgressChanged(seek_bar, seek_bar.getProgress());
             }

             @Override 
             public void onClick(View view) {
                  switch (view.getId()) {
                  case R.id.play_button: text_shown.setText("Playing...");         
                  player.start();
                  break; case R.id.pause_button: player.pause();
                  text_shown.setText("Paused...");
                  }
             }

             public void onProgressChanged(SeekBar seek_Bar, int progress,
                  boolean fromUser) {
                  player.seekTo(progress);
             }
    }

1
请查看此链接:https://dev59.com/mWQn5IYBdhLWcg3wAjPJ - Nauman Ali Shah
在我看来,即使没有用户交互,您每秒钟调用一次seekTo似乎是不必要的。 - Michael
谢谢,最终我移除了那个方法调用:onProgressChanged(seek_bar, seek_bar.getProgress()); 并且移除了 onProgressChanged(...) 方法。 然后我使用了被接受的答案。 - TwoThumbSticks
2个回答

5

我是这样做的

seek_bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                if(fromUser)
                    player.seekTo(progress);
            }
       @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

非常好用!所以我们实际上需要覆盖seek_bar.setOnSeekBarChangeListener(this)方法,使用我们自己的实现?为什么在Android中可拖动的seekbar行为不是默认的,当它似乎是最常见的用例?我只是一个新手Android开发者,你能解释一下为什么吗? - TwoThumbSticks

0

你忘记添加监听器了,在你的onCreate()中加入以下代码:

seek_bar = (SeekBar)findViewById(R.id.yourseekbarhere);
seek_bar.setOnSeekBarChangeListener(this);

这应该能帮到你


seek_bar.setOnSeekBarChangeListener((SeekBar.OnSeekBarChangeListener) this); 它不允许我这样做,建议我寻找解决方案。 - TwoThumbSticks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接