I use this method to control the screen brightness:

  public void ChangeBrightness (int Value) {
     final WindowManager.LayoutParams params;
     params = getWindow (). getAttributes ();
     params.screenBrightness = 1;
     params.screenBrightness = (float) ((float) Value / 10.0);
     getWindow (). setAttributes (params);
 } 

Accordingly, for example, in using with the SeekBar slider to adjust the brightness I prescribe:

  onProgressChanged (SeekBar seekBar, int progress, boolean fromUser) {
     ChangeBrightness (progress);
 } 

Everything works with a bang.

But I want to deal with the creation of an external library and therefore I want to bring this method into it.

I created a library, made public variables for data transfer and a public method. In class name I use extends AppCompatActivity

However, when you try to start, a NullPoinerException crashes. Judging by the message, there is a problem with WindowManager.LayoutParams .

What am I doing wrong?

Library code:

  import android.os.Bundle;
 import android.support.v7.app.AppCompatActivity;
 import android.view.WindowManager;

 public class BrightnessControl extends AppCompatActivity {

     public static WindowManager.LayoutParams params;
     public static String _text;

     @Override
     protected void onCreate (Bundle savedInstanceState) {
         super.onCreate (savedInstanceState);
         final WindowManager.LayoutParams get_params = getWindow (). getAttributes ();
         params = get_params;
         params.screenBrightness = 1;
     }


     public void ChangeBrightness (int Value, String result) {

         params.screenBrightness = (float) ((float) Value / 10.0);

         getWindow (). setAttributes (params);
         getWindow (). addFlags (WindowManager.LayoutParams.FLAGS_CHANGED);

         _text = String.valueOf (Value);
         result = _text;
     }
 } 

Logs

  java.lang.NullPointerException: float android.view.WindowManager $ LayoutParams.screenBrightness' on a null object reference
     at com.vrcorp.brightnessunitylib.BrightnessControl.ChangeBrightness (BrightnessControl.java:23)
     at com.vrcorp.brightness.MainActivity $ 2.onProgressChanged (MainActivity.java:48)
     at android.widget.SeekBar.onProgressRefresh (SeekBar.java:93)
     at android.widget.ProgressBar.doRefreshProgress (ProgressBar.java:1303)
     at android.widget.ProgressBar.refreshProgress (ProgressBar.java:1315)
     at android.widget.ProgressBar.setProgress (ProgressBar.java:1361)
     at android.widget.AbsSeekBar.trackTouchEvent (AbsSeekBar.java:666)
     at android.widget.AbsSeekBar.onTouchEvent (AbsSeekBar.java:610)
     at android.view.View.dispatchTouchEvent (View.java:9306)
     at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2554)
     at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2255)
     at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2554)
     at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2255)
     at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2554)
     at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2255)
     at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2554)
     at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2255)
     at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2554)
     at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2255)
     at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2554)
     at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2255)
     at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2554)
     at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2255)
     at com.android.internal.policy.PhoneWindow $ DecorView.superDispatchTouchEvent (PhoneWindow.java:2403)
     at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent (PhoneWindow.java:1737)
     at android.app.Activity.dispatchTouchEvent (Activity.java:2820)
     at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent (WindowCallbackWrapper.java:63)
     at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent (WindowCallbackWrapper.java:63)
     at com.android.internal.policy.PhoneWindow $ DecorView.dispatchTouchEvent (PhoneWindow.java:2364)
     at android.view.View.dispatchPointerEvent (View.java:9526)
     at android.view.ViewRootImpl $ ViewPostImeInputStage.processPointerEvent (ViewRootImpl.java:4267)
     at android.view.ViewRootImpl $ ViewPostImeInputStage.onProcess (ViewRootImpl.java:4133)
     at android.view.ViewRootImpl $ InputStage.deliver (ViewRootImpl.java.367)
     at android.view.ViewRootImpl $ InputStage.onDeliverToNext (ViewRootImpl.java.73727)
     at android.view.ViewRootImpl $ InputStage.forward (ViewRootImpl.java:37693)
     at android.view.ViewRootImpl $ AsyncInputStage.forward (ViewRootImpl.java:3819)
     at android.view.ViewRootImpl $ InputStage.apply (ViewRootImpl.java:3701)
     at android.view.ViewRootImpl $ AsyncInputStage.apply (ViewRootImpl.java:3876)
     at android.view.ViewRootImpl $ InputStage.deliver (ViewRootImpl.java.367)
     at android.view.ViewRootImpl $ InputStage.onDeliverToNext (ViewRootImpl.java.73727)
     at android.view.ViewRootImpl $ InputStage.forward (ViewRootImpl.java:37693)
     at android.view.ViewRootImpl $ InputStage.apply (ViewRootImpl.java:3701)
     at android.view.ViewRootImpl $ InputStage.deliver (ViewRootImpl.java.367)
     at android.view.ViewRootImpl.deliverInputEvent (ViewRootImpl.javament959)
     at android.view.ViewRootImpl.doProcessInputEvents (ViewRootImpl.java:5933)
     at android.view.ViewRootImpl.enqueueInputEvent (ViewRootImpl.javailiate894)
     at android.view.ViewRootImpl $ WindowInputEventReceiver.onInputEvent (ViewRootImpl.java:6062)
     at android.view.InputEventReceiver.dispatchInputEvent (InputEventReceiver.java:185)
     at android.os.MessageQueue.nativePollOnce (Native Method)
     at android.os.MessageQueue.next (MessageQueue.java:323)
     at android.os.Looper.loop (Looper.java:135)
     at android.app.ActivityT 
  • Add stack to question - JVic
  • @Victor added by your request at the end - Andrew Terekhin

1 answer 1

Activity becomes "live" only when it is created and launched by the system, otherwise it has neither context nor access to resources and components.
That is, your BrightnessControl onCreate not called, and getWindow returns null and, accordingly, its inheritance from AppCompatActivity is basically meaningless.
You can pass the Window parameter to the ChangeBrightness method - I don’t remember any other way to get it there.
The only option when your code will work is if the current running activity is inherited from BrightnessControl and ChangeBrightness is invoked by its instance.