Search code examples
androidvolumeandroid-seekbar

How to control the seek bar, on click, of volume button during media playback in android?


How does one control the seek bar of the volume button in the media player in Android? I require to control the seek bar of the volume button's onClick method during playback.

The code has been provided here :

private void initControls() {
    // Return the handle to a system-level service - 'AUDIO'.
    audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

    // Find the seekbar 1
    mediaVlmSeekBar = (SeekBar) findViewById(R.id.seekBar1);
    // Set the max range(Volume in this case) of seekbar
    // for Media player volume
    mediaVlmSeekBar.setMax(audioManager
            .getStreamMaxVolume(AudioManager.STREAM_MUSIC));
    // Set the progress with current Media Volume
    mediaVlmSeekBar.setProgress(audioManager
            .getStreamVolume(AudioManager.STREAM_MUSIC));

    try {
        // Listener to receive changes to the SeekBar1's progress level
        mediaVlmSeekBar
                .setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
                    public void onStopTrackingTouch(SeekBar arg0) {
                    }

                    public void onStartTrackingTouch(SeekBar arg0) {
                    }

                    // When progress level of seekbar1 is changed
                    public void onProgressChanged(SeekBar arg0,
                            int progress, boolean arg2) {
                        audioManager.setStreamVolume(
                                AudioManager.STREAM_MUSIC, progress, 0);
                    }
                });
    } catch (Exception e) {
        e.printStackTrace();
    }
}

//change seekbar when click device button
public boolean onKeyDown(int keyCode, KeyEvent event) {
      if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) 
     { 
          mediaVlmSeekBar = (SeekBar) findViewById(R.id.seekBar1);
            int index = mediaVlmSeekBar.getProgress(); 
            mediaVlmSeekBar.setProgress(index + 1); 
            return true; 
     } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)
      {
            int index = mediaVlmSeekBar.getProgress(); 
            mediaVlmSeekBar.setProgress(index - 1); 
            return true; 
     }
      return super.onKeyDown(keyCode, event); 
     }

Solution

  • I have modified your code and its working fine. Check out

    public boolean onKeyDown(int keyCode, KeyEvent event) {
        AudioManager audio = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
        int currentVolume = audio.getStreamVolume(AudioManager.STREAM_MUSIC);
        if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
            seekBarVolume.setProgress(currentVolume);
            return false;
        } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
            seekBarVolume.setProgress(currentVolume);
            return false;
        }
        return super.onKeyDown(keyCode, event);
    }