我必须激活android的系统键锁(当你按下关机/挂机按钮时你会得到一个)。看这里:
我已经浏览了文档,但我发现的都是PowerManager和KeyguardManager。两者似乎都不是解决方案:-(。
那么,每个人都知道如何从 android 应用程序中实现这一点吗?(如果需要特殊权限,那没问题,但更改设备的设置不是解决方案......)
编辑:或者有人知道这绝对不可能吗?顺便提一句。craigs 发送密钥的解决方案不再起作用(见评论)。
我必须激活android的系统键锁(当你按下关机/挂机按钮时你会得到一个)。看这里:
我已经浏览了文档,但我发现的都是PowerManager和KeyguardManager。两者似乎都不是解决方案:-(。
那么,每个人都知道如何从 android 应用程序中实现这一点吗?(如果需要特殊权限,那没问题,但更改设备的设置不是解决方案......)
编辑:或者有人知道这绝对不可能吗?顺便提一句。craigs 发送密钥的解决方案不再起作用(见评论)。
一段时间以来,我一直在寻找完全相同的问题的答案。显然,在 2.0 之后,应用级别的设备管理器权限被删除。但是在 Froyo - 2.2 中,设备策略管理器被揭示为我们的开发人员提供了大量的管理级别控制。
http://developer.android.com/guide/topics/admin/device-admin.html
您正在寻找的是我的朋友 KeyguardManager.KeyguardLock 中的reenableKeyguard()方法!
看起来屏幕锁定功能是使用以下方法执行的:
public void goToSleep(long time)
中的方法PowerManager.java
。可以通过这种方式获得对它的引用:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
但是,这需要许可
android.permission.DEVICE_POWER
这是仅对系统可用的 2 级权限。
所以看起来这是不可行的。这仅适用于 1.1 版,我不知道 1.5 版。
这里有一个很好的例子:
http://www.anddev.org/throwing-simulating_keystrokes_programatically-t717.html
看起来您可以以编程方式将任何击键发送到系统。听起来您正在寻找的键码是 KEYCODE_ENDCALL,但如果这不起作用,还有很多其他代码可以在这里尝试:
http://developer.android.com/reference/android/view/KeyEvent.html
我不知道是否有任何 API 调用导致锁定发生,但这似乎是一个非常可靠的解决方法,直到您找到更好的解决方案。
挖掘 Android 源代码发现 WindowManagerService 似乎有一个公共方法 ( startAppFreezingScreenLocked
) 来激活它。这可能是开始寻找答案的好地方,因为不幸的是,您似乎无法直接获得 WindowManagerService 对象。