Использую для управления яркостью экрана такой метод:
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); }
Соответственно, например, в при использовании с ползунком SeekBar
для настройки яркости прописываю
onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { ChangeBrightness (progress); }
Всё работает на ура.
Но я хочу разобраться с созданием внешней библиотеки и поэтому хочу вынести этот метод в неё.
Я создал библиотеку, сделал публичные переменные для передачи данных и публичный метод. В названии класса использую extends AppCompatActivity
Однако, при попытке запуска вылетает NullPoinerException
. Судя по сообщению, есть проблема с WindowManager.LayoutParams
.
Что я делаю не так?
Код библиотеки:
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; } }
Логи
java.lang.NullPointerException: Attempt to write to field '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:3674) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3727) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3693) 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:3674) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3727) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3693) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3701) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3674) at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5959) at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5933) at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5894) 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
Activity
становится "живой" только когда создаётся и запускается системой, иначе она не имеет ни контекста, ни доступа к ресурсам и компонентам.
То есть у Вашего BrightnessControl
onCreate
не вызывается, а getWindow
возвращает null
и соответственно его наследование от AppCompatActivity
в принципе бессмысленно.
Вы можете передать Window
параметром в метод ChangeBrightness
- другого способа его там добыть я не припомню.
Единственный вариант, когда Ваш код будет работать - если текущая запущенная активность наследуется от BrightnessControl
и ChangeBrightness
вызывается у её инстанса.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Не надеюсь, что кому-то будет не лень выполнять половину работы за меня, но сам я уже разобраться не в состоянииНужно сделать такую страничку:...
Пытаюсь зарегистрировать свойство зависимости
код скрипта который лежит на Panel в Canvas, при игре на телефоне часто нет реакции на движение пальцем или она некоректна(поворачивает не в ту сторо),...