Q:

Программная блокировка экрана смартфона

Я приобрёл себе китайскую клавиатуру и возникла потребность в написании для неё "драйвера", дабы назначить клавиши. Делаю я это через InputMethodService. 
С обычными клавишами проблем не возникло, но всё же хотелось бы добавить кнопку пробуждения/блокировки экрана. Мною было перепробовано множество подходов, но желаемого результата достичь не удалось.
Пробуждение смартфона не вызвало трудностей:
InputConnection ic = getCurrentInputConnection();
ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_WAKEUP)) 

Даже удалось эмулировать нажатие кнопки POWER:
Process mSU = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(mSU.getOutputStream());
os.writeBytes("input keyevent 26");
os.flush();
os.close();
mSU.waitFor();

Но, скорее всего, по причине того, что у меня установлен Cyanogenmod, вместо выключения экрана, появляется меню с выбором действия (выключить, перезагрузить...). Однако этот способ также пробуждает устройство, когда экран выключен. 
Версия андроид: 4.2.2
Устройство: Samsung Galaxy Tab 2 7.0 p3100

A:

Эмуляция нажатия кнопки POWER работает верно, но метод Process.waitFor() там лишний. Правильный код: 
Process mSU = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(mSU.getOutputStream());
os.writeBytes("input keyevent 26");
os.flush();
os.close();

Для эмуляции кнопок этим способом, требуются права супер пользователя.
Коды кнопок можно получить из констант класса KeyEvent. Здесь используется команда ADB adb shell input keyevent 'код кнопки'. 

