Siva
Siva

Reputation: 1861

Exoplayer audio playing background even video was closed

Below is My fragment that contains exoplayer which will inflate with draggable panel in Activity. My problem is while swiping the draggable panel left or right video is closing but audio is still playing in background. If I swipe off the draggable panel audio also needs to closed.Tried many sources couldn't found any solutions.Also In both fragment and Activity while swipping off the draggable panel onPause() method is not triggred. Also public void onClosedToLeft() method also not getting called.

@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();
}
}

This is my Activity

@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);
    }


}

Upvotes: 2

Views: 1967

Answers (1)

Solution:

You need to call the method stop() on the exoplayer object whenever you are closing the player, like this:

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

Hope this helps.

Upvotes: 2

Related Questions