Android - Activation of the system key lock (aka l

2019-02-06 16:30发布

I have to activate android's system key lock (the one you get when you press the power off/hang up button). See here:

img

I already browsed the docs but everything I found was PowerManager and KeyguardManager. Both seem not to be the solution :-(.

So, does everyone know how to achieve that from a android application? (If special permissions are required, that is no problem but changing the device's settings is not a solution...)

EDIT: Or does someone know that this is definitely not possible at all? Btw. craigs solution with sending keys does not work anymore (see comments).

5条回答
贪生不怕死
2楼-- · 2019-02-06 17:01

I have been searching for an answer to the exact same question for a while. Apparently, after 2.0 onwards the device manager privileges for the app level were removed. But with Froyo - 2.2 the device policy manager is revealed granting us developers a multitude of administrative level controls.

http://developer.android.com/guide/topics/admin/device-admin.html

查看更多
Ridiculous、
3楼-- · 2019-02-06 17:03

Digging through the Android source found WindowManagerService which seems to have a public method (startAppFreezingScreenLocked) for activating this. This may be a good place to start looking for your answer, as unfortunately it doesn't seem as though you can directly get a WindowManagerService object.

查看更多
祖国的老花朵
4楼-- · 2019-02-06 17:04

What you're looking for is the reenableKeyguard() method in KeyguardManager.KeyguardLock my friend !

查看更多
淡お忘
5楼-- · 2019-02-06 17:13

Looks like the screen lock function is performed using the method:

public void goToSleep(long time)

method in PowerManager.java. It's possible to get a reference to it in this fashion:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);

However this requires the permission

android.permission.DEVICE_POWER

which is a level 2 permission available to the system only.

So looks like this isn't doable. This is for version 1.1 only, I don't know for 1.5.

查看更多
We Are One
6楼-- · 2019-02-06 17:18

There's a pretty good example here:

http://www.anddev.org/throwing-simulating_keystrokes_programatically-t717.html

It looks like you can programmatically cause any keystroke to be sent to the system. It sounds like the keycode you're looking for is the KEYCODE_ENDCALL, but if that doesn't work there are plenty of other codes to try here:

http://developer.android.com/reference/android/view/KeyEvent.html

I don't know if there's any API call to cause the lock to occur, but this seems like a pretty sturdy workaround until you find a better solution.

查看更多
登录 后发表回答