我在制作应用程序以将我的 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:我是个菜鸟,我发现通过编程而不是阅读教科书上的内容来理解更好。所以,如果你在程序中发现一些非常愚蠢的东西,请不要评判。