개발/ANDROID 안드로이드 / / 2023. 7. 25. 16:44

Android Java Seekbar 미디어 소리 조절

반응형

Seekbar로 안드로이드 기기 미디어 소리 조절

 

AndroidManifest.xml

<!-- 음량 조절 권한 -->
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

 

layout xml

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp">

    <SeekBar
        android:id="@+id/volumeSeekBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:max="100"
        android:progress="50" />

    <Button
        android:id="@+id/decreaseVolumeButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="-"
        android:textSize="20sp"
        android:layout_alignParentStart="true"
        android:layout_marginStart="16dp"
        android:layout_alignBaseline="@id/volumeSeekBar"
        android:onClick="decreaseVolumeClick" />

    <Button
        android:id="@+id/increaseVolumeButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="+"
        android:textSize="20sp"
        android:layout_alignParentEnd="true"
        android:layout_marginEnd="16dp"
        android:layout_alignBaseline="@id/volumeSeekBar"
        android:onClick="increaseVolumeClick" />

</RelativeLayout>

 

Seekbar 레이아웃 커스텀 참조

https://overpay.tistory.com/53

 

Android Java Seekbar 화면 밝기 조절

Seekbar로 안드로이드 기기 화면 밝기 조절 AndroidManifest.xml layout xml custom_seekbar_progress.xml (Seekbar의 선 부분에 해당) custom_seekbar_thumb.xml (Seekbar의 원 부분에 해당) BrightnessControlUtils.java public class Brightn

overpay.tistory.com

 

VolumeControlUtils.java

public class VolumeControlUtils {

    private SeekBar volumeSeekBar;
    private Button decreaseButton;
    private Button increaseButton;
    private AudioManager audioManager;

    /**
     * VolumeControlUtils 클래스의 생성자입니다.
     * @param volumeSeekBar SeekBar 객체
     * @param decreaseButton 볼륨 감소 버튼
     * @param increaseButton 볼륨 증가 버튼
     * @param activity 액티비티 객체
     */
    public VolumeControlUtils(SeekBar volumeSeekBar, Button decreaseButton, Button increaseButton, Activity activity) {
        this.volumeSeekBar = volumeSeekBar;
        this.decreaseButton = decreaseButton;
        this.increaseButton = increaseButton;
        this.audioManager = (AudioManager) activity.getSystemService(Activity.AUDIO_SERVICE);

        initializeVolumeSeekBar();
        setButtonClickListeners();
        setSeekBarChangeListener();
    }

    /**
     * SeekBar를 초기화하고 현재 볼륨 값을 설정합니다.
     */
    private void initializeVolumeSeekBar() {
        int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        int currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
        volumeSeekBar.setMax(maxVolume);
        volumeSeekBar.setProgress(currentVolume);
    }

    /**
     * 볼륨 감소 버튼과 볼륨 증가 버튼의 클릭 리스너를 설정합니다.
     */
    private void setButtonClickListeners() {
        decreaseButton.setOnClickListener(view -> decreaseVolume());
        increaseButton.setOnClickListener(view -> increaseVolume());
    }

    /**
     * 볼륨을 감소시키고 SeekBar의 값도 업데이트합니다.
     */
    private void decreaseVolume() {
        int currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
        if (currentVolume > 0) {
            audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, 0);
            volumeSeekBar.setProgress(currentVolume - 1);
        }
    }

    /**
     * 볼륨을 증가시키고 SeekBar의 값도 업데이트합니다.
     */
    private void increaseVolume() {
        int currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
        int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        if (currentVolume < maxVolume) {
            audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, 0);
            volumeSeekBar.setProgress(currentVolume + 1);
        }
    }

    /**
     * SeekBar의 상태가 변경될 때 볼륨을 설정합니다.
     */
    private void setSeekBarChangeListener() {
        volumeSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                // 사용자가 SeekBar 값을 변경할 때 볼륨을 설정합니다.
                audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                // 사용자가 SeekBar를 터치하여 드래그를 시작할 때 호출됩니다.
            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                // 사용자가 SeekBar 터치를 끝내고 드래그를 멈출 때 호출됩니다.
            }
        });
    }
}

 

activity.java

public class SettingVolumeActivity extends AppCompatActivity {
    ActivitySettingVolumeBinding binding;
    private VolumeControlUtils volumeControlUtils;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = DataBindingUtil.setContentView(this, R.layout.activity_setting_volume);

        // VolumeControlUtils 클래스를 사용하여 볼륨 조절 기능 초기화
        volumeControlUtils = new VolumeControlUtils(binding.volumeSeekBar, binding.decreaseVolumeButton, binding.increaseVolumeButton, this);
    }
}
반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유