如何永久改变屏幕的亮度?

时间:2015-11-06 17:57:27

标签: android service brightness screen-brightness

我制作应用程序时遇到了很多问题,以便将我的Android手机屏幕的亮度降低到低于正常水平的项目。我做了很多研究,并制作了一个程序。该程序确实降低了移动设备的亮度,但它不会保持更改,因为活动在关闭时会丢失。我想在后台保持活动的活力。我知道我必须使用该服务,但我无法实现它。所以,我的计划是:

import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
import android.os.IBinder;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.app.Activity;
import android.support.annotation.Nullable;
import android.view.Menu;
import android.view.Window;
import android.view.WindowManager;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;

public class MainActivity extends Activity {

    private SeekBar seekBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        seekBar = (SeekBar) findViewById(R.id.seekBar1);
        seekBar.setMax(200);

        float curBrightnessValue = 0;
        try {
            curBrightnessValue = android.provider.Settings.System.getInt(
                    getContentResolver(),
                    android.provider.Settings.System.SCREEN_BRIGHTNESS);
        } catch (SettingNotFoundException e) {
            e.printStackTrace();
        }

        int screen_brightness = (int) curBrightnessValue;
        seekBar.setProgress(screen_brightness);
        seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
            int progress = 0;

            @Override
            public void onProgressChanged(SeekBar seekBar, int progresValue,
                                          boolean fromUser) {
                progress = progresValue;
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                // Do something here,
                // if you want to do anything at the start of
                // touching the seekbar
            }



            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                android.provider.Settings.System.putInt(getContentResolver(),
                        String.valueOf(Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL),progress);
                android.provider.Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
                WindowManager.LayoutParams layoutpars = getWindow().getAttributes();
                layoutpars.screenBrightness = progress / (float)255;
                layoutpars.alpha=0.05f;
                Window window = getWindow();
                window.setAttributes(layoutpars);
                //window.addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
                window.setDimAmount((float) 1.0) ;
                window.setFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND,
                        WindowManager.LayoutParams.FLAG_DIM_BEHIND);
            }
        });
    }

}

有人可以帮我解决这个问题吗?如果你发现这个问题重复了一些先前提出过的问题,请将链接也放到这个问题上。在建议如何在此实现服务时,请告诉我必须添加/那些代码行的确切位置。提前谢谢。

PS:我是一个相当的菜鸟,我觉得通过编程而不是阅读教科书中的内容可以更好地理解。所以,如果你在程序中发现了一些非常愚蠢的东西,请不要做出评判。

0 个答案:

没有答案