Question

Ok so I got my Seek bar to change Volume and that part is working. But when I change volume on buttons on my phone, seekbar on screen remains same. Problem: SeekBar is not movin-increasing decreasing when I increase/decrease volume on phone buttons. How to set that?

import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
 private SeekBar volumeSeekbar = null;
private AudioManager audioManager = null; 

     private void initControls()
    {
        try
        {
            volumeSeekbar = (SeekBar)findViewById(R.id.seekBar1);
            audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
            volumeSeekbar.setMax(audioManager
                    .getStreamMaxVolume(AudioManager.STREAM_MUSIC));
            volumeSeekbar.setProgress(audioManager
                    .getStreamVolume(AudioManager.STREAM_MUSIC));   


            volumeSeekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() 
            {
                @Override
                public void onStopTrackingTouch(SeekBar arg0) 
                {
                }

                @Override
                public void onStartTrackingTouch(SeekBar arg0) 
                {
                }

                @Override
                public void onProgressChanged(SeekBar arg0, int progress, boolean arg2) 
                {
                    audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
                            progress, 0);
                }
            });
        }
        catch (Exception e) 
        {
            e.printStackTrace();
        }
    }
Était-ce utile?

La solution

Well, this is normal because you need to ask to be notified when the hardware volume buttons are used.

I saw multiples answers to that type of question, it seems that this answer is an universal one :

Is there a broadcast action for volume changes?

Autres conseils

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

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); 
     }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top