настройка яркости через Settings.System.putInt() не работает

Я пытаюсь изменить режим и значение яркости на своем телефоне и нашел отличная ветка здесь, в SO, которая, как я думал, ответила на мой вопрос, но на моем froyo Dell Streak этот код просто ничего не делает. putInt () возвращает true, поэтому по всем учетным записям он кажется успешным, но яркость остается точно такой же, даже не могу заставить его переключаться между ручным и автоматическим ...... У меня есть набор разрешений WRITE_SETTINGS и logcat похоже, не выходит никаких других релевантных выходных данных.... сейчас в тупике, возьму перерыв на некоторое время o_0

Вот фрагмент того, как я это называю, это внутри моей (единственной) активности:

public void onCheckedChanged(RadioGroup group, int checked) {
    //BrightSettings bright = new BrightSettings();

    switch(checked)
    {
        case R.id.daybutton:
            //bright.setBrightMode(BrightSettings.DAY_MODE);
            if(Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC))
                Log.d("NightMode", "Brightness seems to be set to auto....");
        case R.id.nightbutton:
            //bright.setBrightMode(BrightSettings.NIGHT_MODE);
            if (Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL) && Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 2) )
                Log.d("NightMode", "Night mode seems to have been set....");
    }
}

person jamzsabb    schedule 30.12.2010    source источник
comment
У вас есть разрешение MODIFY_PHONE_STATE? Я бы проверил это в первую очередь.   -  person Sebastian Roth    schedule 30.12.2010
comment
Я не понимаю, как MODIFY_PHONE_STATE имеет значение, он управляет состоянием телефонии, но я попробовал, и это все равно ничего не дало мне. Я действительно запутался, потому что putInt() возвращает true в случае успеха, и я получаю отладочное сообщение, указывающее, что оператор if был истинным, так что это просто странно. Спасибо за предложение, хотя   -  person jamzsabb    schedule 01.01.2011
comment
У меня точно такая же проблема. Некоторые устройства, такие как Galaxy Tab, автоматически пересчитывают и применяют настройки. Другие устройства будут применять настройки только после блокировки экрана или перезагрузки устройства.   -  person Janusz    schedule 08.02.2011


Ответы (5)


Это работает для меня:

int brightnessMode = android.provider.Settings.System.getInt(getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE);

if (brightnessMode == android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC)
{
    android.provider.Settings.System.putInt(getContentResolver(),android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE,android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
}

Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 0);
person Rizwan Asif    schedule 10.01.2018

Это работа для меня от kotlin。

<uses-permission
    android:name="android.permission.WRITE_SETTINGS"
    tools:ignore="ProtectedPermissions" />
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_test)
    if(isCanWriteSettings(this))
        setupLight(this,255)//0~255
    else
        requestCanWriteSettings(this)
}
/**
 *
 * @param context
 * @param light max 255
 */
fun setupLight(context: Context, light: Int) {
    try {
        val brightnessMode = Settings.System.getInt(
            context.contentResolver,
            Settings.System.SCREEN_BRIGHTNESS_MODE
        )
        if (brightnessMode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
            Settings.System.putInt(
                context.contentResolver,
                Settings.System.SCREEN_BRIGHTNESS_MODE,
                Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL
            )
        }
        Settings.System.putInt(
            context.contentResolver,
            Settings.System.SCREEN_BRIGHTNESS,
            light
        )
    } catch (e: Exception) {
        Log.e("setupLight","Exception $e")
    }
}

fun isCanWriteSettings(context: Context): Boolean {
    return Build.VERSION.SDK_INT < Build.VERSION_CODES.M || Settings.System.canWrite(context)
}


fun requestCanWriteSettings(activity: Activity){
    if (isCanWriteSettings(context = activity))
        return //not need
    try {
        val intent = Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS)
        intent.data = Uri.parse("package:" + activity.packageName)
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
        activity.startActivityForResult(intent, 0)
    }catch (e: Exception){
        Log.e("requestCanWriteSettings","requestCanWriteSettings $e")
    }
}
person Deyu瑜    schedule 18.02.2020

У меня также есть Dell Streak с Froyo.

Настройка яркости экрана на самом деле меняется для меня (если вы перейдете в «Настройки», вы увидите изменение ползунка).

Однако яркость экрана на самом деле физически не меняется до тех пор, пока не пройдет какое-то время. Вот это я не могу понять.

person mellowg    schedule 24.06.2011

Ваш код изменит настройку яркости (сохраненное значение), но это не означает, что он изменит текущую яркость.

Если вы запускаете этот код в службе, у вас нет возможности изменить текущую яркость (кроме странных хаков). Если код выполняется в пользовательском интерфейсе, вы можете изменить настройки яркости, а затем изменить текущую яркость с помощью WindowManager.

person Diego    schedule 02.12.2015

Полный ответ будет:

 /**
     * Set Device Brightness
     *
     * @param brightness Range (0-255)
     */
    @Override
    public void setDeviceBrightness(int brightness) {

        if (!Settings.System.canWrite(this.context)) {
            Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
            intent.setData(Uri.parse("package:" + this.context.getPackageName()));
            this.context.startActivity(intent);
            return;
        }

        try {
            if (Settings.System.getInt(
                     this.context.contentResolver,
                    Settings.System.SCREEN_BRIGHTNESS_MODE) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
                Settings.System.putInt(
                          this.context.contentResolver,
                        Settings.System.SCREEN_BRIGHTNESS_MODE,
                        Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
            }
        } catch (Settings.SettingNotFoundException e) {
            e.printStackTrace();
        }

        if(Settings.System.putInt(this.context.contentResolver, SCREEN_BRIGHTNESS, brightness )) {
            Log.i("Updated System brightness to: " + brightness );
        }else {
            Log.w("ERROR: Failed to Updated System brightness to: " + brightness );
        }
    }
person Hitesh Sahu    schedule 13.01.2021