以编程方式从另一个线程关闭Android手机中的屏幕

时间:2016-05-02 16:04:02

标签: java android multithreading lockscreen wakelock

我试图关闭Android手机的屏幕。

我读了很多其他的讨论,并尝试了两种方式: Turn off screen on Android

事实上,我真正需要做的是启动锁定屏幕(要求输入PIN码)。我不确定该怎么做,也无法找到相关的文档,所以我试图关闭屏幕,希望当我重新打开手机时它会显示锁定屏幕。不幸的是,我无法测试我的理论。

第一个选项:

PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Your Tag");    
wl.acquire();    
wl.release();

第二个选项:

WindowManager.LayoutParams params = getWindow().getAttributes();   
params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;    
params.screenBrightness = 0;    
getWindow().setAttributes(params);   

第一个选项什么都没做,第二个选项导致我的应用程序崩溃。在堆栈调用中,我看到了一个可疑的日志: Only the original thread that created a view hierarchy can touch its views.我从另一个线程调用此代码,在后台运行(不是主线程) 这可能导致崩溃吗?我怎样才能克服这个问题呢? 有没有其他方法以编程方式启动锁定屏幕,而不必关闭屏幕?

1 个答案:

答案 0 :(得分:1)

在第一个选项中,也添加ACQUIRE_CAUSES_WAKEUP。这会唤醒屏幕并显示锁定屏幕。

PowerManager.WakeLock wl = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "Your Tag");    

希望这会有所帮助。