首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在android流媒体中当搜索条到达特定时间时触发事件

如何在android流媒体中当搜索条到达特定时间时触发事件
EN

Stack Overflow用户
提问于 2013-07-05 14:46:39
回答 2查看 263关注 0票数 0

我有一个表面视图,和一个媒体播放器来流式传输视频。比方说,10秒后,我需要使一个特定的布局可见。因此,有没有什么事件可以持续监控搜索栏的进度,并在适当的时候触发事件?

详细解释:假设我有一段10分钟的视频正在播放。在第10秒结束时,布局应在视图中可见。我该如何实现这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-05 15:01:53

我建议你看看OnSeekBarChangeListener#OnProgressChange http://developer.android.com/reference/android/widget/SeekBar.OnSeekBarChangeListener.html

另一种方法是编写一个监视视频当前位置的处理程序,然后将视图设置为在当前位置超过10秒时可见。之后停止处理程序。

代码语言:javascript
复制
VideoTimerHandler videoTimerHandler = new VideoTimerHandler();
videoTimerHandler.playVideoTimer();

// Handler that monitor video progress every 1 sec
private class VideoTimerHandler extends Handler {
    private static final String TAG = "VideoTimerHandler";

    private final int VIDEO_TIMER_PERIOD = 1000;

    public void playVideoTimer(){
        this.sendEmptyMessage(0);
    }

    public void stopVideoTimer(){
        this.removeMessages(0);
    }

    public void handleMessage(Message msg){
        if (player.getCurrentPosition() > 10){
            yourView.setVisibility(View.VISIBLE);
        }
        else{
            // check again after 1 sec
            this.sendEmptyMessageDelayed(0, VIDEO_TIMER_PERIOD);
        }
    }
}
票数 0
EN

Stack Overflow用户

发布于 2014-12-05 19:03:19

First方法

为什么您不想使用与您的SeekBar关联的MediaPlayer?MediaPlayer公开了一个onCompletion回调:

代码语言:javascript
复制
OnCompletionListener cListener = new OnCompletionListener(){

    public void onCompletion(MediaPlayer mp){
        //do something
    }
};

mediaPlayer.setOnCompletionListener(cListener);

第二种方法

为此,您应该使用Handler's postDelayed函数。它将在main UI thread上以指定的延迟运行您的代码,因此您将能够更新UI控件。

代码语言:javascript
复制
    private int mInterval = 10*1000; // 10 seconds by default,or calculate it mediaplayer.getDuration(); //it is in milliseconds

      private Handler mHandler;

      @Override
      protected void onCreate(Bundle bundle) {
        ...
        mHandler = new Handler();
      }

      Runnable mStatusChecker = new Runnable() {
        @Override 
        public void run() {
          showDesireLayout(); //change visibility in this function.
          //mHandler.postDelayed(mStatusChecker, mInterval); //uncomment it if you want to repeat it after equal intervals of time.
        }
      };

      void startRepeatingTask() {
        mStatusChecker.run(); 
      }

      void stopRepeatingTask() {
        mHandler.removeCallbacks(mStatusChecker);
      }

只需调用startRepeatingTask();即可

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17482696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档