#java #android
Я приобрёл себе китайскую клавиатуру и возникла потребность в написании для неё "драйвера", дабы назначить клавиши. Делаю я это через 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
Ответы
Ответ 1
Эмуляция нажатия кнопки 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 'код кнопки'.Ответ 2
Идея раз. Если работает KEYCODE_WAKEUP, то попробуйте KEYCODE_SLEEP и KEYCODE_POWER. Идея два. DevicePolicyManager mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE); mDPM.lockNow(); Идея три (чит, это не выключение экрана). WindowManager.LayoutParams params = getWindow().getAttributes(); params.screenBrightness = 0; getWindow().setAttributes(params);
Комментариев нет:
Отправить комментарий