Java 使用手势控制时Exoplayer应用程序崩溃

Java 使用手势控制时Exoplayer应用程序崩溃,java,android,gesture,exoplayer2.x,Java,Android,Gesture,Exoplayer2.x,我使用exoplayer来流式播放视频文件,但当我尝试实现手势控制(如向上滑动、向下滑动、双击)时,应用程序崩溃。简单地说,当我向上或向下滑动时,应用程序崩溃,双击根本不起作用。 我的外星玩家活动 GESTURECONTROLLER gcont = new GESTURECONTROLLER(); gcont.setActivity(this); gestureDetectorCompat = new GestureDetectorCompat(t

我使用exoplayer来流式播放视频文件,但当我尝试实现手势控制(如向上滑动、向下滑动、双击)时,应用程序崩溃。简单地说,当我向上或向下滑动时,应用程序崩溃,双击根本不起作用。 我的外星玩家活动

        GESTURECONTROLLER gcont = new GESTURECONTROLLER();
        gcont.setActivity(this);
        gestureDetectorCompat = new GestureDetectorCompat(this, gcont);

        LoadControl loadControl = new DefaultLoadControl();

        BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();

        TrackSelector trackSelector = new DefaultTrackSelector(new AdaptiveTrackSelection.Factory(bandwidthMeter));

        simpleExoPlayer = ExoPlayerFactory.newSimpleInstance(this, trackSelector, loadControl);

        playerView.setPlayer(simpleExoPlayer);

        DefaultDataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(this, Util.getUserAgent(this, "demo"));

        MediaSource contentMediaSource = buildMediaSource(streamLink);
        MediaSource[] mediaSources = new MediaSource[1];
        mediaSources[0] = contentMediaSource;

        MediaSource mediaSource = new MergingMediaSource(mediaSources);

        simpleExoPlayer.prepare(mediaSource);
        simpleExoPlayer.setPlayWhenReady(true);
        playerView.setKeepScreenOn(true);
}

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        gestureDetectorCompat.onTouchEvent(event);
        return true;
    }

    public void ifDoubleTap() {
        Toast.makeText(this, "I double tap", Toast.LENGTH_SHORT).show();
    }

    public void ifSwipeLeft() {
        Toast.makeText(this, "I swipe Left", Toast.LENGTH_SHORT).show();
    }
    public void ifSwipeRight() {
        Toast.makeText(this, "I swipe Right", Toast.LENGTH_SHORT).show();
    }
    public void ifSwipeUp() {
        Toast.makeText(this, "I swipe Up", Toast.LENGTH_SHORT).show();
    }
    public void ifSwipeDown() {
        Toast.makeText(this, "I swipe Down", Toast.LENGTH_SHORT).show();
    }
我的手势控制器类

public class GESTURECONTROLLER extends GestureDetector.SimpleOnGestureListener {

    private static int MIN_SWIPE_DISTANCE_X = 100;
    private static int MIN_SWIPE_DISTANCE_Y = 100;

    private static int MAX_SWIPE_DISTANCE_X = 1000;
    private static int MAX_SWIPE_DISTANCE_Y = 1000;

    private MainActivity activity = null;

    public MainActivity getActivity(){
        return activity;
    }

    public void setActivity(MainActivity activity){
        this.activity = activity;
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

        float deltaX = e1.getX() - e2.getX();
        float deltaY = e1.getY() - e2.getY();

        float deltaXabs = Math.abs(deltaX);
        float deltaYabs = Math.abs(deltaY);

        if (deltaXabs >= MIN_SWIPE_DISTANCE_X && deltaXabs <= MAX_SWIPE_DISTANCE_X){
            if(deltaX > 0 ) {
                //Swipe Left
              this.activity.ifSwipeLeft();
            } else {
                //Swipe Right
               this.activity.ifSwipeRight();
            }
        }

        if (deltaYabs >= MIN_SWIPE_DISTANCE_Y && deltaYabs <= MAX_SWIPE_DISTANCE_Y){
            if(deltaY > 0 ) {
                //Swipe Up
                this.activity.ifSwipeUp();
            } else {
            //Swipe Down
                this.activity.ifSwipeDown();
            }
        }

        return true;
    }

    @Override
    public boolean onSingleTapConfirmed(MotionEvent e) {
        this.activity.IfSingletap();
        return true;
    }

    @Override
    public boolean onDoubleTap(MotionEvent e) {
        this.activity.ifDoubleTap();
        return true;
    }
公共类GESTURECONTROLLER扩展GestureDetector.SimpleOnGestureListener{
专用静态整数最小滑动距离X=100;
专用静态最小滑动距离=100;
专用静态int最大滑动距离=1000;
专用静态int最大滑动距离=1000;
private MainActivity活动=null;
公共main活动getActivity(){
返回活动;
}
公共无效设置活动(主活动){
这个。活动=活动;
}
@凌驾
公共布尔onFling(MotionEvent e1、MotionEvent e2、float-velocityX、float-velocityY){
float deltaX=e1.getX()-e2.getX();
float deltaY=e1.getY()-e2.getY();
浮动deltaXabs=Math.abs(deltaX);
float deltaYabs=Math.abs(deltaY);
如果(deltaXabs>=最小滑动距离&&deltaXabs 0){
//左击
this.activity.ifswipleft();
}否则{
//向右滑动
this.activity.ifSwipeRight();
}
}
如果(deltaYabs>=最小滑动距离&&deltaYabs 0){
//刷卡
this.activity.ifSwipeUp();
}否则{
//向下滑动
this.activity.ifSwipeDown();
}
}
返回true;
}
@凌驾
公共布尔值OnSingleTapConfiged(运动事件e){
this.activity.IfSingletap();
返回true;
}
@凌驾
公共布尔onDoubleTap(运动事件e){
this.activity.ifDoubleTap();
返回true;
}

我知道exoplayer库中硬编码的默认触摸控件,但我可以禁用它并改用此控件吗

你能发布日志吗?@Louis Nguyen我不能使用物理设备你能在GESTURECONTROLLER中检查空活动吗?@LouisNguyen我该如何尝试在像这样使用它之前检查空活动下面:if(this.activity!=null){this.activity.ifswipleft();}