¿Cómo aumentar/disminuir el brillo de la pantalla usando las teclas de volumen mediante programación en Android?

El brillo de la pantalla es uno de esos factores que afecta directamente a los usuarios, así como a la batería de un dispositivo. Los dispositivos Android son sistemas inteligentes y tienen un sistema incorporado para el brillo automático. Pero la mayoría de las veces esta función no está marcada por los usuarios o está desactivada de forma predeterminada. Independientemente de si esta característica está presente, activada o desactivada, o ausente en cualquier dispositivo, un desarrollador debe tener en cuenta esta oportunidad y desarrollar una aplicación optimizada. Cualquier cosa que se declare dentro de la aplicación puede tener un efecto en el espacio exterior, es decir, si el brillo de la pantalla se cambió mediante programación desde una aplicación, el valor del brillo puede permanecer inalterado incluso después de salir de la aplicación. Entonces, uno debe intentar rastrear los originales y configurarlos antes de que un usuario salga.

¿Dónde podemos usar esta característica?

  1. No multimedia: las aplicaciones no multimedia (música o video) podrían usar los botones de volumen para aumentar o disminuir el brillo de una pantalla en pasos.
  2. Aplicaciones de lectores de libros: leer libros a veces puede ser una elección cambiante, uno puede aumentar o disminuir el brillo directamente desde la aplicación en pasos.
  3. Aplicaciones de papel de noticias: se puede aumentar o disminuir el brillo directamente desde la aplicación en pasos.

A través de este artículo, queremos que sepas que los botones de volumen pueden usarse para aumentar y disminuir el brillo de una pantalla.

Sample gif

Acercarse

Paso 1: Crear un nuevo proyecto

Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Kotlin como lenguaje de programación.

Paso 2: trabajar con el archivo AndroidManifest.xml

Controlar el brillo de la pantalla del dispositivo requiere un cambio en la configuración raíz, para lo cual se declara un permiso de uso de WRITE_SETTINGS en el archivo AndroidManifest.xml .

<usos-permiso android:name=”android.permission.WRITE_SETTINGS”

       herramientas: ignorar = «Permisos protegidos» />

AndroidManifest.xml

XML

<?xml version="1.0" encoding="utf-8"?>
<manifest 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="org.geeksforgeeks.screenbrightness_usingvolumekeys">
  
      <!--Add this permission-->
    <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>

Paso 3: trabajar con el archivo activity_main.xml

No hay nada que hacer con el archivo activity_main.xml . Así que mantén el archivo como está.

XML

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
  
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
  
</androidx.constraintlayout.widget.ConstraintLayout>

Paso 4: trabajar con el archivo MainActivity.kt

Finalmente, vaya al archivo MainActivity.kt y consulte el siguiente código. MainActivity.kt

Kotlin

import android.content.Context
import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.provider.Settings
import android.view.KeyEvent
import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
import kotlin.math.round
  
class MainActivity : AppCompatActivity() {
  
    var brightnessValue = 255
  
    @RequiresApi(Build.VERSION_CODES.M)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
  
    // Function to decrease the brightness
    @RequiresApi(Build.VERSION_CODES.M)
    fun decrease() { // Get app context object.
  
        val context = applicationContext
  
        // Check whether has the write settings permission or not.
        val settingsCanWrite = hasWriteSettingsPermission(context)
  
        // If do not have then open the Can modify system settings panel.
        if (!settingsCanWrite) {
            changeWriteSettingsPermission(context)
        } else {
            if (brightnessValue >= 11) {
                brightnessValue -= 10
                changeScreenBrightness(context, brightnessValue)
                val k = brightnessValue.toDouble() / 255
                Toast.makeText(
                    applicationContext, "Brightness : ${round(k * 100)}%",
                    Toast.LENGTH_SHORT
                ).show()
            }
        }
    }
  
    // Function to increase the brightness
    @RequiresApi(Build.VERSION_CODES.M)
    fun increase() {
        val context = applicationContext
  
        // Check whether has the write settings permission or not.
        val settingsCanWrite = hasWriteSettingsPermission(context)
  
        // If do not have then open the Can modify system settings panel.
        if (!settingsCanWrite) {
            changeWriteSettingsPermission(context)
        } else {
            if (brightnessValue <= 245) {
                brightnessValue += 10
                changeScreenBrightness(context, brightnessValue)
                val k = brightnessValue.toDouble() / 255
                Toast.makeText(
                    applicationContext, "Brightness : ${round(k * 100)}%",
                    Toast.LENGTH_SHORT
                ).show()
            }
        }
    }
  
    // Listen to the volume keys
    @RequiresApi(Build.VERSION_CODES.M)
    override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
  
        // What happens when volume down key is pressed
        if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
            decrease()
        }
  
        // What happens when volume up key is pressed
        if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
            increase()
        }
        return true
    }
  
    // Check whether this app has android write settings permission.
    @RequiresApi(Build.VERSION_CODES.M)
    private fun hasWriteSettingsPermission(context: Context): Boolean {
        var ret = true
        // Get the result from below code.
        ret = Settings.System.canWrite(context)
        return ret
    }
  
    // Start can modify system settings panel to let 
    // user change the write settings permission.
    private fun changeWriteSettingsPermission(context: Context) {
        val intent = Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS)
        context.startActivity(intent)
    }
  
    // This function only take effect in real physical android device,
    // it can not take effect in android emulator.
    private fun changeScreenBrightness(context: Context, screenBrightnessValue: Int) {
        // Change the screen brightness change mode to manual.
        Settings.System.putInt(
            context.contentResolver,
            Settings.System.SCREEN_BRIGHTNESS_MODE,
            Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL
        )
        // Apply the screen brightness value to the system, this will change 
        // the value in Settings ---> Display ---> Brightness level.
        // It will also change the screen brightness for the device.
        Settings.System.putInt(
            context.contentResolver, Settings.System.SCREEN_BRIGHTNESS,
            screenBrightnessValue
        )
    }
}

Salida: ejecutar en el emulador

Tenga en cuenta que antes de ejecutar la aplicación, asegúrese de haber otorgado los permisos necesarios ; de lo contrario, la aplicación se bloqueará.

Publicación traducida automáticamente

Artículo escrito por aashaypawar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *