Я создаю приложение Screensaver, которое автоматически уменьшает яркость экрана до 0% через 7 секунд. В одно касание яркость экрана уменьшается до 100%. Затем через 7 секунд яркость экрана снова уменьшается до 0%. Но это работает только в этом приложении. Я хочу работать с этой функциональностью в фоновом режиме, в любом другом приложении. Как я могу это сделать. Вот код, указанный ниже:
private static final String DEBUG_TAG = "TAG";
private View mView;
//Variable to store brightness value
private int brightness;
//Content resolver used as a handle to the system's settings
private ContentResolver cResolver;
//Window object, that will store a reference to the current window
private Window window;
//Intent globalService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
boolean settingsCanWrite = Settings.System.canWrite(this);
//Toast.makeText(this, ""+settingsCanWrite, Toast.LENGTH_SHORT).show();
//YourService yourService = new YourService(this);
//yourService.s
if (settingsCanWrite)
{
dimsToZero();
}
else
{
try {
if (checkSystemWritePermission()) {
dimsToZero();
}else {
Toast.makeText(this, "Allow modify system settings ==> ON ", Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
Log.i("brightness",e.toString());
Toast.makeText(this, "Unable to change brightness ", Toast.LENGTH_SHORT).show();
}
}
//globalService = new Intent(this,GlobalTouchService.class);
}
private boolean checkSystemWritePermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if(Settings.System.canWrite(this))
return true;
else
openAndroidPermissionsMenu();
}
return false;
}
private void openAndroidPermissionsMenu() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
intent.setData(Uri.parse("package:" + this.getPackageName()));
this.startActivity(intent);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = MotionEventCompat.getActionMasked(event);
switch (action) {
case (MotionEvent.ACTION_DOWN):
Log.d(DEBUG_TAG, "Action was DOWN");
dimsTo100();
dimsToZero();
return true;
case (MotionEvent.ACTION_MOVE):
Log.d(DEBUG_TAG, "Action was MOVE");
dimsTo100();
dimsToZero(); // then after 7s again dims to 0
return true;
case (MotionEvent.ACTION_UP):
Log.d(DEBUG_TAG, "Action was UP");
dimsTo100();
dimsToZero(); // then after 7s again dims to 0
return true;
case (MotionEvent.ACTION_CANCEL):
Log.d(DEBUG_TAG, "Action was CANCEL");
dimsTo100();
dimsToZero(); // then after 7s again dims to 0
return true;
case (MotionEvent.ACTION_OUTSIDE):
Log.d(DEBUG_TAG, "Movement occurred outside bounds " +
"of current screen element");
dimsTo100();
dimsToZero(); // then after 7s again dims to 0
return true;
default:
return super.onTouchEvent(event);
}
}
private void dimsTo100() {
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = (float) 1;
getWindow().setAttributes(lp);
}
private void dimsToZero() {
//7s delaying
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = (float) 0;
getWindow().setAttributes(lp);
}
},7000);
}
/*
public void buttonClicked(View v){
if(v.getTag() == null){
startService(globalService);
v.setTag("on");
Toast.makeText(this, "Start Service", Toast.LENGTH_SHORT).show();
}
else{
stopService(globalService);
v.setTag(null);
Toast.makeText(this, "Stop Service", Toast.LENGTH_SHORT).show();
}
}
*/
@Override
public void onBackPressed() {
super.onBackPressed();
startActivity(new Intent(MainActivity.this, MainActivity.class));
}
}