【问题标题】:How to control the audio using Android Media Player seek bar?如何使用 Android Media Player 搜索栏控制音频?
【发布时间】:2016-02-15 10:58:26
【问题描述】:

我可以使用安卓媒体播放器播放音频文件。我可以显示进度条和附加的 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);
             }
    }

【问题讨论】:

  • 在我看来,即使没有用户交互,您也会每秒调用一次 seekTo。这似乎没有必要。
  • 谢谢我最终删除了该方法调用。 onProgressChanged(seek_bar, seek_bar.getProgress());并删除 onProgressChanged(... mehod 然后我使用了接受的答案。

标签: android android-mediaplayer


【解决方案1】:

我就是这样做的

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 的默认行为?我只是一个noob android开发者,你能解释一下为什么会这样吗?
【解决方案2】:

你忘记添加监听器 把它放在你的onCreate() 中:

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

应该帮助你

【讨论】:

  • 它不建议我去 seek_bar.setOnSeekBarChangeListener((SeekBar.OnSeekBarChangeListener) this);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
相关资源
最近更新 更多