Using SeekBar to Control Volume in android? Using SeekBar to Control Volume in android? android android

Using SeekBar to Control Volume in android?


Please look at below code . It solves your problem.

import android.app.Activity;import android.content.Context;import android.media.AudioManager;import android.os.Bundle;import android.widget.SeekBar;import android.widget.SeekBar.OnSeekBarChangeListener;public class TestExample extends Activity {    /** Called when the activity is first created. */    private SeekBar volumeSeekbar = null;    private AudioManager audioManager = null;     @Override    public void onCreate(Bundle savedInstanceState)     {        super.onCreate(savedInstanceState);        setVolumeControlStream(AudioManager.STREAM_MUSIC);        setContentView(R.layout.main);        initControls();    }    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();        }    }


This is a custom View I've used to adjust the volume level. It works by sliding your finger up, but you could easily change that.

SliderView

public class SliderView extends View implements OnGestureListener, OnTouchListener {private int mHeight = 0;private int mMaxValue = 16;private float mDelta = 0;private int mColor = Color.WHITE;private GestureDetector mGestureDetector;private OnValueChangeListener mListener;public SliderView(Context context) {    super(context);    init(context);}public SliderView(Context context, AttributeSet attrs) {    super(context, attrs);    init(context);}public SliderView(Context context, AttributeSet attrs, int defStyle) {    super(context, attrs, defStyle);    init(context);}@Overridepublic boolean onDown(MotionEvent e) {    mDelta = 0;    return false;}@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {    return false;}@Overridepublic void onLongPress(MotionEvent e) {    mDelta = 0;}@Overridepublic boolean onScroll(MotionEvent event1, MotionEvent event2, float distanceX, float distanceY) {    if (mDelta >= 1 || mDelta <= -1) {        if (mListener != null) {            mListener.onValueChanged((int) mDelta);        }        mDelta = 0;    } else {        mDelta += mMaxValue * distanceY / mHeight * 2;    }    return false;}@Overridepublic void onShowPress(MotionEvent e) {}@Overridepublic boolean onSingleTapUp(MotionEvent e) {    return false;}@Overridepublic void onSizeChanged(int w, int h, int oldw, int oldh) {    mHeight = getHeight();}@Overridepublic boolean onTouch(View v, MotionEvent event) {    int action = event.getAction();    if (action == MotionEvent.ACTION_DOWN) {        v.setBackgroundColor(Color.argb(0x33, Color.red(mColor), Color.green(mColor),                Color.blue(mColor)));    } else if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {        v.setBackgroundColor(Color.TRANSPARENT);    }    mGestureDetector.onTouchEvent(event);    return true;}public void setColor(int color) {    mColor = color;}public void setMax(int max) {    mMaxValue = max;}public void setOnValueChangeListener(OnValueChangeListener listener) {    mListener = listener;}private void init(Context context) {    setOnTouchListener(this);    mGestureDetector = new GestureDetector(context, this);    mHeight = getHeight();}public interface OnValueChangeListener {    void onValueChanged(int value);    }}

Using it - make sure you implement OnValueChangeListener.

SliderView mSlider;mSlider= (SliderView) findViewById(id);mSlider.setOnValueChangeListener(this);mSlider.setMax(mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));

It's not exactly what you're asking for, but it should definitely help you out, I think.


@CommonsWare do it like this in https://github.com/commonsguy/cw-omnibus/tree/master/SystemServices/Volume and also set five types of volume using SeekBar

Handling five different types of Volume

/***  Copyright (c) 2008-2012 CommonsWare, LLC  Licensed under the Apache License, Version 2.0 (the "License"); you may not  use this file except in compliance with the License. You may obtain a copy  of the License at http://www.apache.org/licenses/LICENSE-2.0. Unless required  by applicable law or agreed to in writing, software distributed under the  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS  OF ANY KIND, either express or implied. See the License for the specific  language governing permissions and limitations under the License.  From _The Busy Coder's Guide to Android Development_    http://commonsware.com/Android*/package com.commonsware.android.syssvc.volume;import android.app.Activity;import android.content.Context;import android.media.AudioManager;import android.os.Bundle;import android.widget.SeekBar;public class Volumizer extends Activity {  SeekBar alarm=null;  SeekBar music=null;  SeekBar ring=null;  SeekBar system=null;  SeekBar voice=null;  AudioManager mgr=null;  @Override  public void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.main);    mgr=(AudioManager)getSystemService(Context.AUDIO_SERVICE);    alarm=(SeekBar)findViewById(R.id.alarm);    music=(SeekBar)findViewById(R.id.music);    ring=(SeekBar)findViewById(R.id.ring);    system=(SeekBar)findViewById(R.id.system);    voice=(SeekBar)findViewById(R.id.voice);    initBar(alarm, AudioManager.STREAM_ALARM);    initBar(music, AudioManager.STREAM_MUSIC);//for Volume this is neccessary    initBar(ring, AudioManager.STREAM_RING);    initBar(system, AudioManager.STREAM_SYSTEM);    initBar(voice, AudioManager.STREAM_VOICE_CALL);  }  private void initBar(SeekBar bar, final int stream) {    bar.setMax(mgr.getStreamMaxVolume(stream));    bar.setProgress(mgr.getStreamVolume(stream));    bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {      public void onProgressChanged(SeekBar bar, int progress,                                    boolean fromUser) {        mgr.setStreamVolume(stream, progress,                            AudioManager.FLAG_PLAY_SOUND);      }      public void onStartTrackingTouch(SeekBar bar) {        // no-op      }      public void onStopTrackingTouch(SeekBar bar) {        // no-op      }    });  }}

And for controlling only Volume use only
music=(SeekBar)findViewById(R.id.music); and initBar(music, AudioManager.STREAM_MUSIC);