1

App has button in the middle That switches between brightness, but right now, if button is clicked twice and i try clicking it again it does not function anymore. Does anyone know how to put screen brightness to previous state before the button was clicked after the button is clicked the second time. Overall the app keeps getting error log when clicking the button. Thanks in advance if someone can figure this out! Here is the error log:

W/System.err: java.lang.SecurityException: com.example.kenert.allinoneapp was not granted  this permission: android.permission.WRITE_SETTINGS.
W/System.err:     at android.os.Parcel.readException(Parcel.java:1684)
W/System.err:     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
W/System.err:     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
W/System.err:     at android.content.ContentProviderProxy.call(ContentProviderNative.java:646)
W/System.err:     at android.provider.Settings$NameValueCache.putStringForUser(Settings.java:1595)
W/System.err:     at android.provider.Settings$System.putStringForUser(Settings.java:1966)
W/System.err:     at android.provider.Settings$System.putIntForUser(Settings.java:2071)
W/System.err:     at android.provider.Settings$System.putInt(Settings.java:2065)
W/System.err:     at com.example.kenert.allinoneapp.ScreenFlashlight$override.turnBrightnessOff(ScreenFlashlight.java:60)
W/System.err:     at com.example.kenert.allinoneapp.ScreenFlashlight$override.screenFlashButtonClicked(ScreenFlashlight.java:28)
W/System.err:     at com.example.kenert.allinoneapp.ScreenFlashlight$override.access$dispatch(ScreenFlashlight.java)
W/System.err:     at com.example.kenert.allinoneapp.ScreenFlashlight.screenFlashButtonClicked(ScreenFlashlight.java:0)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
W/System.err:     at android.view.View.performClick(View.java:5637)
W/System.err:     at android.view.View$PerformClick.run(View.java:22429)
W/System.err:     at android.os.Handler.handleCallback(Handler.java:751)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
W/System.err:     at android.os.Looper.loop(Looper.java:154)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6119)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

Here is the code of the class :

import android.content.Intent;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageButton;

public class ScreenFlashlight extends AppCompatActivity {
private boolean brightnessOnOff;
private ImageButton screenFlashOnOffButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_screen_flashlight);
    screenFlashOnOffButton = (ImageButton) findViewById(R.id.screenFlashOnOffButton);
    brightnessOnOff = false;


}
public void screenFlashButtonClicked(View view) {
    try {
        if (brightnessOnOff) {

            turnBrightnessOff();
        } else{
                brightnessOnOff = true;
            turnBrightnessOn();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}



private void turnBrightnessOn() {
    try {
        screenFlashOnOffButton.setImageResource(R.drawable.screenonbutton);
        Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
        Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, 255);
        //Screen refresh to add brightness
        int brightness = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE);
        WindowManager.LayoutParams lp = getWindow().getAttributes();
        lp.screenBrightness = (float) brightness / 255;
        getWindow().setAttributes(lp);


    } catch (Exception e) {
        e.printStackTrace();
    }
}

private void turnBrightnessOff() {
    try {
        screenFlashOnOffButton.setImageResource(R.drawable.screenoffbutton);
        Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
        Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, 100);
        //Refresh screen
        int brightnesss = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE);
        WindowManager.LayoutParams lpp = getWindow().getAttributes();
        lpp.screenBrightness = (float) brightnesss/100;
        getWindow().setAttributes(lpp);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Gino Mempin
  • 25,369
  • 29
  • 96
  • 135
Kenertj
  • 57
  • 7
  • your error log is incomplete, exception type can't be seen… – Martin Marconcini Nov 09 '16 at 23:04
  • Additionally, you're breaking good programming rules here. The act of XXX (in this case turnBrignessOff/On) should have nothing to do with storing it in the settings. That should be in a different method or even class, that knows how to do that. Your functions are breaking the "do one thing and do it right" basic rule. (Tho this is irrelevant anyway) – Martin Marconcini Nov 09 '16 at 23:09
  • Added the exception and according to that, it has something to do with the write settings, but i did put permission in the Android Manifest. – Kenertj Nov 09 '16 at 23:27
  • 1
    You have found your problem. Now find why you don't have permissions. Example by googling: "android write_settings example" and picking the 1st result: http://stackoverflow.com/a/32083622/2684 here on stack overflow. ;) – Martin Marconcini Nov 09 '16 at 23:34

1 Answers1

0

I use this:

   public void onClick(View arg0) {
      int curBrightnessValue=android.provider.Settings.System.getInt(
      getContentResolver(),android.provider.Settings.System.SCREEN_BRIGHTNESS);
      int SysBackLightValue = curBrightnessValue-25;
      android.provider.Settings.System.putInt(getContentResolver(),
      android.provider.Settings.System.SCREEN_BRIGHTNESS,
      SysBackLightValue);
}

Dont forget permission:

<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
josedlujan
  • 5,357
  • 2
  • 27
  • 49