Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:以特定的时间间隔以编程方式打开和关闭屏幕_Android_Screen Brightness - Fatal编程技术网

Android:以特定的时间间隔以编程方式打开和关闭屏幕

Android:以特定的时间间隔以编程方式打开和关闭屏幕,android,screen-brightness,Android,Screen Brightness,我需要创建一个应用程序,其中屏幕关闭一段时间(比如10秒),然后继续,显示消息2秒,然后再次关闭。这会一直重复,直到点击一个按钮。(即,我想在单击按钮时停止此活动)。我尝试通过改变屏幕亮度来实现这一点 我的代码有点像这样: float dim = 0; float bright = 1.0f; WindowManager.LayoutParams lp=getWindow().getAttributes(); bright = Settings.System.getInt(getContentR

我需要创建一个应用程序,其中屏幕关闭一段时间(比如10秒),然后继续,显示消息2秒,然后再次关闭。这会一直重复,直到点击一个按钮。(即,我想在单击按钮时停止此活动)。我尝试通过改变屏幕亮度来实现这一点

我的代码有点像这样:

float dim = 0;
float bright = 1.0f;
WindowManager.LayoutParams lp=getWindow().getAttributes();
bright = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
wait(2000);
lp.screenBrightness = dim;
wait(10000);
lp.screenBrightness = bright;
如果我没有错的话,这个应该可以用。但当我运行它时,它会变暗,然后显示发生错误,强制关闭消息

任何帮助都将不胜感激

以下是logcat错误:

02-22 11:12:50.804: D/AndroidRuntime(10871): Shutting down VM
02-22 11:12:50.804: W/dalvikvm(10871): threadid=1: thread exiting with uncaught exception (group=0x40018578)
02-22 11:12:50.859: E/AndroidRuntime(10871): FATAL EXCEPTION: main
02-22 11:12:50.859: E/AndroidRuntime(10871): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.wakelock/com.example.wakelock.WakeLock}:java.lang.IllegalMonitorStateException: object not locked by thread before wait()
02-22 11:12:50.859: E/AndroidRuntime(10871):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
02-22 11:12:50.859: E/AndroidRuntime(10871):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
02-22 11:12:50.859: E/AndroidRuntime(10871):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
02-22 11:12:50.859: E/AndroidRuntime(10871):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
02-22 11:12:50.859: E/AndroidRuntime(10871):    at android.os.Handler.dispatchMessage(Handler.java:99)
02-22 11:12:50.859: E/AndroidRuntime(10871):    at android.os.Looper.loop(Looper.java:130)
02-22 11:12:50.859: E/AndroidRuntime(10871):    at android.app.ActivityThread.main(ActivityThread.java:3687)
02-22 11:12:50.859: E/AndroidRuntime(10871):    at java.lang.reflect.Method.invokeNative(Native Method)
02-22 11:12:50.859: E/AndroidRuntime(10871):    at java.lang.reflect.Method.invoke(Method.java:507)
02-22 11:12:50.859: E/AndroidRuntime(10871):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
02-22 11:12:50.859: E/AndroidRuntime(10871):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
02-22 11:12:50.859: E/AndroidRuntime(10871):    at dalvik.system.NativeStart.main(Native Method)
02-22 11:12:50.859: E/AndroidRuntime(10871): Caused by: java.lang.IllegalMonitorStateException: object not locked by thread before wait()
02-22 11:12:50.859: E/AndroidRuntime(10871):    at java.lang.Object.wait(Native Method)
02-22 11:12:50.859: E/AndroidRuntime(10871):    at java.lang.Object.wait(Object.java:395)
02-22 11:12:50.859: E/AndroidRuntime(10871):    at com.example.wakelock.WakeLock.onCreate(WakeLock.java:42)
02-22 11:12:50.859: E/AndroidRuntime(10871):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-22 11:12:50.859: E/AndroidRuntime(10871):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
02-22 11:12:50.859: E/AndroidRuntime(10871):    ... 11 more

我用handler解决了这个问题。对于将来的任何参考,以下是代码

 float dim = 0.004f; // if you set this 0, it wont work. 0.004 is the least value
 float bright = 1.0f;
 Handler mHandler = new Handler();

    mHandler.post(new Runnable() {

                        @Override
                        public void run() {

                            lp.screenBrightness= bright;
                            getWindow().setAttributes(lp);                              
                            final Handler handler = new Handler(); 
                            Timer t = new Timer();                              
                            t.schedule(new TimerTask() { 
                                    public void run() { 
                                            handler.post(new Runnable() { 
                                                    public void run() { 
                                                    lp.screenBrightness=dim;
                                                    getWindow().setAttributes(lp);
                                                    } 
                                            }); 
                                    } 
                            }, 2000);   //  flashing of screen
                        }
                    });

发布您的日志错误。。。!!!!下面是我尝试在try-catch块中使用Thread.sleep(2000)而不是wait(2000)时遇到的问题。但现在屏幕上根本没有显示任何变化。它只是闲着,什么也没发生。