Exoplayer проигрывает аудио фон, даже видео было закрыто - PullRequest
0 голосов
/ 22 октября 2018

Ниже - Мой фрагмент, который содержит exoplayer, который будет накачиваться с помощью перетаскиваемой панели в Activity.Моя проблема заключается в том, что при перетаскивании перетаскиваемой панели левое или правое видео закрывается, но звук все еще воспроизводится в фоновом режиме.Если я проведу пальцем по перетаскиваемой панели, звук также должен быть закрыт. Попытка многих источников не может найти никаких решений. Также во фрагменте и в действии при перетаскивании перетаскиваемой панели метод onPause () не запускается.Также не вызывается публичный метод void onClosedToLeft ().

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.dragpanelone, container, false);

        try {
            exoPlayerView = (SimpleExoPlayerView)v.findViewById(R.id.exoplayer);
            BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
            TrackSelector trackSelector = new DefaultTrackSelector(new AdaptiveTrackSelection.Factory(bandwidthMeter));
            exoplayer = ExoPlayerFactory.newSimpleInstance(getActivity(), trackSelector);

            Uri uri = Uri.parse(videoURL);
            DefaultHttpDataSourceFactory dataSourceFactory = new DefaultHttpDataSourceFactory("exoplayer_video");
            ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
            MediaSource mediaSource = new ExtractorMediaSource(uri, dataSourceFactory, extractorsFactory, null, null);
            exoPlayerView.setPlayer(exoplayer);
            exoplayer.prepare(mediaSource);
            exoplayer.setPlayWhenReady(true);
        } catch (Exception e){
            e.printStackTrace();
        }

        return v;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        exoplayer.release();
    }



    @Override
    public void onStop() {
        super.onStop();

        exoplayer.setPlayWhenReady(false);

    }

    public void pausePlayback() {
        exoplayer.setPlayWhenReady(false); //pauses the playback if it's playing
    }

    private void releasePlayer() {
        if (exoplayer != null) {
            exoplayer.release();
            exoplayer.setPlayWhenReady(false);
            exoplayer = null;
        }
    }
public static void closePlayer()
{
    exoplayer.clearVideoSurface();
}
}

Это моя активность

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        initializeDraggablepanel();
        hookDraggablePanelListners();


    }


    public void initializeDraggablepanel(){

        draggablepanel = (DraggablePanel)findViewById(R.id.draggable_panel);
        draggablepanel.setFragmentManager(getSupportFragmentManager());
        draggablepanel.setTopFragment(new DragpanelFragOne());
        draggablepanel.setBottomFragment(new DragPanelTwo());
        draggablepanel.setTopViewHeight(550);
        draggablepanel.initializeView();

    }

    private void hookDraggablePanelListners(){
        draggablepanel.setDraggableListener(new DraggableListener() {
            @Override
            public void onMaximized() {

            }

            @Override
            public void onMinimized() {

            }

            @Override
            public void onClosedToLeft() {

                DragpanelFragOne.closePlayer();
                Intent i = new Intent(MainActivity.this,HomeScreen.class);
                startActivity(i);

            }

            @Override
            public void onClosedToRight() {
                DragpanelFragOne.closePlayer();
                Intent i = new Intent(MainActivity.this,HomeScreen.class);
                startActivity(i);

            }
        });
    }

    @Override
    public void onPause() {
        super.onPause();
        DragpanelFragOne.closePlayer();
    }




    @Override
    public void onStop() {
        super.onStop();
        draggablepanel.closeToLeft();
    }



    @Override
    public void onBackPressed() {
        draggablepanel.isClickToMinimizeEnabled();

        Intent i = new Intent(MainActivity.this,HomeScreen.class);
        startActivity(i);
    }


}

1 Ответ

0 голосов
/ 22 октября 2018

Решение:

Вам необходимо вызывать метод stop() для объекта exoplayer всякий раз, когда вы закрываете игрока, например:

if (exoPlayer != null) {
    exoPlayer.setPlayWhenReady(false);
    exoPlayer.stop();
    exoPlayer.seekTo(0);
}

Надеюсь, это поможет.

...