Страницы

Поиск по вопросам

вторник, 17 декабря 2019 г.

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

#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);

Комментариев нет:

Отправить комментарий