我制作应用程序时遇到了很多问题,以便将我的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:我是一个相当的菜鸟,我觉得通过编程而不是阅读教科书中的内容可以更好地理解。所以,如果你在程序中发现了一些非常愚蠢的东西,请不要做出评判。