반응형
Seekbar로 안드로이드 기기 화면 밝기 조절
AndroidManifest.xml
<!-- 설정 수정 권한 요청 -->
<uses-permission android:name="android.permission.WRITE_SETTINGS"
tools:ignore="ProtectedPermissions" />
layout xml
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.SettingActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
<!-- 기본 -->
<!-- <SeekBar-->
<!-- android:id="@+id/brightnessSeekBar"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_centerInParent="true"-->
<!-- android:max="255"-->
<!-- android:progress="150" />-->
<!-- 커스텀 -->
<SeekBar
android:id="@+id/brightnessSeekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:max="255"
android:progress="150"
android:progressDrawable="@drawable/custom_seekbar_progress"
android:thumb="@drawable/custom_seekbar_thumb" />
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
custom_seekbar_progress.xml (Seekbar의 선 부분에 해당)
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!--시크바 배경-->
<item android:id="@android:id/background">
<shape android:shape="line"> <!--선 : 길이6dp -->
<stroke android:width="6dp" android:color="#D5D5D5" />
</shape>
</item>
<!-- 시크바 프로그래스 -->
<item android:id="@android:id/progress" >
<clip>
<shape android:shape="line">
<stroke android:width="6dp" android:color="#FFA800" />
</shape>
</clip>
</item>
</layer-list>
custom_seekbar_thumb.xml (Seekbar의 원 부분에 해당)
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/color_FF650F_danger">
<item>
<shape android:shape="oval">
<solid android:color="@color/color_FF650F_danger"/>
<size android:width="30dp" android:height="30dp"/>
</shape>
</item>
</ripple>
BrightnessControlUtils.java
public class BrightnessControlUtils {
private SeekBar brightnessSeekBar;
public BrightnessControlUtils(SeekBar brightnessSeekBar) {
this.brightnessSeekBar = brightnessSeekBar;
}
/**
* 화면 밝기를 설정합니다.
*
* @param activity 액티비티 객체
* @param brightnessValue 설정할 화면 밝기 값 (0 ~ 255)
*/
public void setBrightness(Activity activity, int brightnessValue) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// Android 6.0 이상은 Settings.System 사용
if (Settings.System.canWrite(activity)) {
Settings.System.putInt(activity.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, brightnessValue);
}
} else {
// Android 6.0 미만은 WindowManager.LayoutParams 사용
WindowManager.LayoutParams layoutParams = activity.getWindow().getAttributes();
layoutParams.screenBrightness = (float) brightnessValue / 255.0f;
activity.getWindow().setAttributes(layoutParams);
}
}
/**
* SeekBar의 상태를 업데이트합니다.
*
* @param activity 액티비티 객체
*/
public void updateSeekBar(Activity activity) {
int currentBrightnessValue = getCurrentBrightness(activity);
brightnessSeekBar.setProgress(currentBrightnessValue);
}
private int getCurrentBrightness(Activity activity) {
int currentBrightnessValue = 0;
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
currentBrightnessValue = Settings.System.getInt(activity.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
} else {
WindowManager.LayoutParams layoutParams = activity.getWindow().getAttributes();
currentBrightnessValue = (int) (layoutParams.screenBrightness * 255.0f);
}
} catch (Settings.SettingNotFoundException e) {
e.printStackTrace();
}
return currentBrightnessValue;
}
}
activity.java
public class SettingActivity extends AppCompatActivity {
ActivitySettingBinding binding;
private BrightnessControlUtils brightnessControlUtils;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_setting);
// 권한이 없을 경우 설정 화면으로 이동하여 권한 요청
if (!Settings.System.canWrite(SettingActivity.this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
intent.setData(Uri.parse("package:" + getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);
}
// 화면 밝기 조절 기능 초기화
setBrightnessControl();
}
/**
* 화면 밝기 조절 기능을 초기화합니다.
*/
private void setBrightnessControl() {
// BrightnessControlUtils 클래스를 사용하여 SeekBar를 초기화합니다.
brightnessControlUtils = new BrightnessControlUtils(binding.brightnessSeekBar);
// SeekBar 값이 변경될 때 화면 밝기를 설정합니다.
binding.brightnessSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// 사용자가 SeekBar 값을 변경할 때 화면 밝기를 설정합니다.
brightnessControlUtils.setBrightness(SettingActivity.this, progress);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// 사용자가 SeekBar를 터치하여 드래그를 시작할 때 호출됩니다.
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// 사용자가 SeekBar 터치를 끝내고 드래그를 멈출 때 호출됩니다.
}
});
// 현재 화면 밝기 값을 SeekBar에 업데이트합니다.
brightnessControlUtils.updateSeekBar(SettingActivity.this);
}
}
반응형
'개발 > ANDROID 안드로이드' 카테고리의 다른 글
Android Java 설치된 스토어 구분 (0) | 2023.08.02 |
---|---|
Android Java Seekbar 미디어 소리 조절 (0) | 2023.07.25 |
Java 티맵 내비 호출 및 경로 안내 (0) | 2023.07.25 |
Java KT 원 내비 호출 및 경로 안내 (0) | 2023.07.21 |
Java 네이버 지도 호출 및 경로 안내 (0) | 2023.07.18 |