Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.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
Java Android-激活系统钥匙锁(又名锁屏)_Java_Android_Keyboard_Locking_Device Admin - Fatal编程技术网

Java Android-激活系统钥匙锁(又名锁屏)

Java Android-激活系统钥匙锁(又名锁屏),java,android,keyboard,locking,device-admin,Java,Android,Keyboard,Locking,Device Admin,我必须激活android的系统钥匙锁(当你按下关机/挂断按钮时得到的钥匙锁)。请看这里: 我已经浏览了文档,但我找到的所有东西都是和。两者似乎都不是解决方案:-( 那么,每个人都知道如何从android应用程序中实现这一点吗?(如果需要特殊权限,这没有问题,但更改设备设置不是一个解决方案…) 编辑:或者有人知道这绝对是不可能的吗?顺便说一句,带有发送键的craigs解决方案不再起作用了(参见评论)。这里有一个很好的例子: 看起来您可以通过编程方式将任何击键发送到系统。听起来您要查找的键码似乎

我必须激活android的系统钥匙锁(当你按下关机/挂断按钮时得到的钥匙锁)。请看这里:

我已经浏览了文档,但我找到的所有东西都是和。两者似乎都不是解决方案:-(

那么,每个人都知道如何从android应用程序中实现这一点吗?(如果需要特殊权限,这没有问题,但更改设备设置不是一个解决方案…)


编辑:或者有人知道这绝对是不可能的吗?顺便说一句,带有发送键的craigs解决方案不再起作用了(参见评论)。

这里有一个很好的例子:

看起来您可以通过编程方式将任何击键发送到系统。听起来您要查找的键码似乎是keycode_ENDCALL,但是如果这不起作用,那么这里还有很多其他代码可以尝试:


我不知道是否有任何API调用导致锁发生,但在找到更好的解决方案之前,这似乎是一个非常可靠的解决方法。

通过Android源代码挖掘发现WindowManagerService,它似乎有一个公共方法(
startAppFreezingScreenLocked
)用于激活此项。这可能是一个开始寻找答案的好地方,因为不幸的是,您似乎无法直接获得WindowManager服务对象。

您正在寻找的是KeyguardManager中的方法。KeyguardLock my friend!

看起来屏幕锁定功能是使用方法:

public void goToSleep(long time)
方法。可以通过以下方式获取对它的引用:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
然而,这需要许可

android.permission.DEVICE_POWER
这是仅对系统可用的2级权限


看来这是不可行的。这只适用于1.1版,我不知道1.5版。

我一直在寻找完全相同问题的答案。显然,在2.0版之后,应用级别的设备管理器特权被删除。但是随着Froyo-2.2的出现,设备策略管理器向我们开发者授予了一个mu行政级别控制的有效性


此方法不再可用,出于安全考虑,已将其删除。啊,bummer,你知道还有其他解决方案吗?嗯,Android 1.0/即将推出的1.5是目标平台,因此无法使用:-(你也可以尝试在IRC(freenode#Android)上跳转)亲自和首席开发人员谈谈你试过了吗?上面看到的锁定屏幕真的出现了吗?我试过了,它确实锁定了键盘,但不是系统键锁…啊,可能误解了你的问题。这是关于显示屏幕本身还是激活系统键锁?sthg,两者都:-).我只想激活正常的系统钥匙锁。屏幕本身就是钥匙锁的一部分。如果用户激活了一个代码(或解锁模式),他应该被询问该代码/模式。仅锁定键盘是不够的:-(嗯,那太糟糕了。事实上,我认为这还不够,因为我真的需要系统钥匙锁,正如你在上面的截图中所看到的。PowerManager的文档中没有提到关于该屏幕的任何内容……它只说设备将进入睡眠状态,但没有说系统钥匙锁被激活。不确定它是否有帮助,因为它的版本不同<1.1 source but:goToSleep在PowerManagerService中调用goToSleep,然后调用goToSleepLocked,然后调用setPowerState。setPowerState中有这样一条注释://当用户按下电源按钮时,我们需要始终发出//将要睡眠的通知,以便键盘保护继续。但是//在屏幕消失之前,我们不能这样做,所以我们不会过早地显示键盘锁//在LockPatternKeyguardView中,会以以下方式调用ScreenLock:查看createLockScreen(){返回新的锁屏(mContext、mLockPatternUtils、mUpdateMonitor、mKeyguardScreenCallback);}另外,看看这个线程。它似乎证实了这是不可能的: