Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách thay đổi độ sáng màn hình theo chương trình trong Android

Giới thiệu

Ví dụ này minh họa cách điều chỉnh độ sáng màn hình (screen brightness) bằng SeekBar thông qua Settings.System.SCREEN_BRIGHTNESS.

Các bước thực hiện

Bước 1: Tạo dự án mới

Mở Android Studio, chọn File → New Project và điền thông tin cần thiết.

Bước 2: Layout với SeekBar (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:padding="8dp"
    android:gravity="center"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Điều chỉnh độ sáng màn hình"/>
    <SeekBar
        android:id="@+id/seekBar"
        android:layout_marginTop="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

Bước 3: Code điều khiển độ sáng (MainActivity.java)

import android.content.Context;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.SeekBar;

public class MainActivity extends AppCompatActivity {
    SeekBar lightBar;
    Context context;
    int brightness;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        lightBar = findViewById(R.id.seekBar);
        context = getApplicationContext();
        
        // Lấy độ sáng hiện tại
        brightness = Settings.System.getInt(context.getContentResolver(),
            Settings.System.SCREEN_BRIGHTNESS, 0);
        lightBar.setProgress(brightness);
        
        lightBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                Settings.System.putInt(context.getContentResolver(),
                    Settings.System.SCREEN_BRIGHTNESS, progress);
            }
            @Override public void onStartTrackingTouch(SeekBar seekBar) {}
            @Override public void onStopTrackingTouch(SeekBar seekBar) {}
        });
    }
}

Bước 4: Manifest với quyền WRITE_SETTINGS (AndroidManifest.xml)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    package="app.com.sample">
    <uses-permission
        android:name="android.permission.WRITE_SETTINGS"
        tools:ignore="ProtectedPermissions" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Chạy ứng dụng

Kết nối thiết bị, nhấn Run. Kéo SeekBar để thay đổi độ sáng màn hình realtime.

Cách thay đổi độ sáng màn hình theo chương trình trong Android

Cách thay đổi độ sáng màn hình theo chương trình trong Android

Lưu ý: Quyền WRITE_SETTINGS là quyền đặc biệt (protected), từ Android 6.0 (API 23) cần người dùng cấp thủ công qua màn hình cài đặt đặc biệt. Code trên dùng tools:ignore để bỏ qua lint, nhưng thực tế cần dẫn user đến Settings để cấp quyền.