SeekBar를 사용하여 안드로이드에서 볼륨을 제어하는 방법?

Android 디바이스의 볼륨 버튼으로 볼륨을 제어하지 않고 시크바를 사용하여 앱의 볼륨을 정확하게 변경하려면 어떻게 해야 하나요? 안드로이드의 볼륨 키에 별도의 기능이 있어서 시크바를 사용하여 볼륨을 조절하고 싶습니다. 누구 도와주실 수 있나요?

질문에 대한 의견 (1)
해결책

아래 코드를 확인하세요. 문제가 해결됩니다.

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

이것은 제가 볼륨 레벨을 조정하는 데 사용한 사용자 지정 '보기'입니다. 손가락을 위로 밀면 작동하지만 쉽게 변경할 수 있습니다.

슬라이더 보기


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

@Override
public boolean onDown(MotionEvent e) {
    mDelta = 0;
    return false;
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    return false;
}

@Override
public void onLongPress(MotionEvent e) {
    mDelta = 0;
}

@Override
public boolean onScroll(MotionEvent event1, MotionEvent event2, float distanceX, float distanceY) {

    if (mDelta >= 1 || mDelta 
해설 (0)

**https://github.com/commonsguy/cw-omnibus/tree/master/SystemServices/Volume][1]에서 다음과 같이 하고 SeekBar를 사용하여 5가지 유형의 볼륨을 설정합니다.

다섯 가지 유형의 볼륨 처리하기.

/***
  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
      }
    });
  }
}

그리고 볼륨만 제어하는 경우에만 music=(SeekBar)findViewById(R.id.music);initBar(music, AudioManager.STREAM_MUSIC);`

해설 (0)