Search code examples
androidandroid-videoviewandroid-video-player

Set volume of a video of a VideoView + SeekBar as control bar


I have to set the volume of a video that is contained in a VideoView. I have to use a SeekBar(I already know how to work with SeekBars, I just would like to know how to set the volume of the video). I also have to use another SeekBar as controll bar. This is my code:

    positionBar = (SeekBar) this.findViewById(R.id.seekBar2);
    volumeBar = (SeekBar) this.findViewById(R.id.seekBar);

    //getting the max volume and the current volume to set the volume bar
    audioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
    maxVolume = audioManager.getStreamMaxVolume(AudioManager.USE_DEFAULT_STREAM_TYPE);
    currentVolume = audioManager.getStreamVolume(AudioManager.USE_DEFAULT_STREAM_TYPE);
    volumeBar.setMax(maxVolume);
    volumeBar.setProgress(currentVolume);

    //putting the video to execute in the video view
    videoPlayer.setVideoPath("android.resource://" + getPackageName() + "/" + R.raw.video);

    //volume bar listener
    volumeBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

        @Override
        public void onProgressChanged(SeekBar seekBar, int i, boolean b) {


        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }
    });
    //********************************************************************

    //position bar listener
    positionBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

        @Override
        public void onProgressChanged(SeekBar seekBar, int i, boolean b) {

        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }
    });
    //********************************************************************

    //timer to update the position bar during the video execution
    //and the volume
    new Timer().scheduleAtFixedRate(new TimerTask() {

        @Override
        public void run() {

            currentVolume = audioManager.getStreamVolume(AudioManager.USE_DEFAULT_STREAM_TYPE);
            volumeBar.setProgress(currentVolume);
        }
    }, 0 , 500);
    //********************************************************************

Solution

  • Check Below Code, To set the volume of the video programatically.

    SeekBar volumeBar;
    int volumeLevel;
    AudioManager audioManager;
    ImageView volumnBtn;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
    
        .....
    
        .....
    
        volumeBar = (SeekBar) findViewById(R.id.volumeBar);
        audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
        volumeBar.setMax(audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
        volumeLevel = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
    
        volumnBtn = (ImageView) findViewById(R.id.volumnBtn);
    
        if (volumeLevel == 0) {
            volumnBtn.setImageDrawable(getResources().getDrawable(R.drawable.volumnMute));
        } else {
            volumnBtn.setImageDrawable(getResources().getDrawable(R.drawable.volumnHigh));
        }
    
        iv_volumn_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                volumeLevel = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
                volumeBar.setProgress(volumeLevel);
                if (volumeBar.getVisibility() == View.GONE) {
                    volumeBar.setVisibility(View.VISIBLE);
                } else {
                    volumeBar.setVisibility(View.GONE);
                }
            }
        });
    
        volumeBar.setProgress(volumeLevel);
        volumeBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
                volumeLevel = i;
                if (volumeLevel == 0) {
                    volumnBtn.setImageDrawable(getResources().getDrawable(R.drawable.volumnMute));
                } else {
                    volumnBtn.setImageDrawable(getResources().getDrawable(R.drawable.volumnHigh));
                }
                audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volumeLevel, 0);
            }
    
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
            }
    
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                volumeBar.setVisibility(View.GONE);
    
                if (volumeLevel == 0) {
                    volumnBtn.setImageDrawable(getResources().getDrawable(R.drawable.volumnMute));
                } else {
                    volumnBtn.setImageDrawable(getResources().getDrawable(R.drawable.volumnHigh));
                }
            }
        });
    }