Отслеживание нажатия клавиш на блокированном экране

Activity Lifecycle, Saving Activity State, Managing Tasks, Intent, Intent Filter
Ответить
X-Dron
Сообщения: 3
Зарегистрирован: 13 фев 2016, 13:28

Отслеживание нажатия клавиш на блокированном экране

Сообщение X-Dron » 13 фев 2016, 19:04

Подскажите как подступиться к задаче.
Хочу на блокированном экране при долгом нажатии клавиши громкости включать фонарь.
Всю интерфейсную часть знаю как реализовать, но затык в отлове клавиш.
Раньше бекграундные задачи (блокировка переворотом, отключение звонка переворотом) сделал сервисами. Все работает.
Здесь вроде бы тоже могу запустить/остановить сервис по выключению/включению экрана, но сервисы не работают с клавишами.
Клавиши обрабатываются только из активити.
Вопрос, можно ли по выключению экрана вызвать подготовленное активити без экранной формы, которое будет только слушать клавиши? Будет ли оно исполнятся в режиме deep sleep?
Отвечу сам.
Вызвать на экран можно, но работать в deep sleep работать не будет. Встанет в Sleep. Как Только экран разблокируется активити будет на "переднем плане" и будет выполнять свои задачи.

Есть какие-нибудь мнения, как обойти ограничения и решить задачу?

Sergey777
Сообщения: 68
Зарегистрирован: 30 мар 2015, 17:16

Re: Отслеживание нажатия клавиш на блокированном экране

Сообщение Sergey777 » 14 фев 2016, 08:44

X-Dron писал(а):Подскажите как подступиться к задаче.
Хочу на блокированном экране при долгом нажатии клавиши громкости включать фонарь.
Всю интерфейсную часть знаю как реализовать, но затык в отлове клавиш.
Раньше бекграундные задачи (блокировка переворотом, отключение звонка переворотом) сделал сервисами. Все работает.
Здесь вроде бы тоже могу запустить/остановить сервис по выключению/включению экрана, но сервисы не работают с клавишами.
Клавиши обрабатываются только из активити.
Вопрос, можно ли по выключению экрана вызвать подготовленное активити без экранной формы, которое будет только слушать клавиши? Будет ли оно исполнятся в режиме deep sleep?
Отвечу сам.
Вызвать на экран можно, но работать в deep sleep работать не будет. Встанет в Sleep. Как Только экран разблокируется активити будет на "переднем плане" и будет выполнять свои задачи.

Есть какие-нибудь мнения, как обойти ограничения и решить задачу?
Здравствуйте. Для таких целей существует широковещательные слушатели Broadcast Receiver. Почитайте про них.http://developer.alexanderklimov.ru/and ... adcast.php

X-Dron
Сообщения: 3
Зарегистрирован: 13 фев 2016, 13:28

Re: Отслеживание нажатия клавиш на блокированном экране

Сообщение X-Dron » 14 фев 2016, 10:42

Sergey777 писал(а): Здравствуйте. Для таких целей существует широковещательные слушатели Broadcast Receiver. Почитайте про них.http://developer.alexanderklimov.ru/and ... adcast.php
Я же написал
могу запустить/остановить сервис по выключению/включению экрана, но сервисы не работают с клавишами.
Т.е. ловлю android.intent.action.SCREEN_ON и android.intent.action.SCREEN_OFF

Код: Выделить всё

        br = new BroadcastReceiver() {
            // действия при получении сообщений
            public void onReceive(Context context, Intent intent) {
                if (DEDUG) Log.d(TAG, intent + " Received");
            }
        };
        // создаем фильтр для BroadcastReceiver
        intFiltr = new IntentFilter();
        intFiltr.addAction("android.intent.action.SCREEN_ON");
        intFiltr.addAction("android.intent.action.SCREEN_OFF");
        // регистрируем (включаем) BroadcastReceiver
        registerReceiver(br, intFiltr);
Но для того, чтобы использовать Receiver нужно, чтобы система формировала соответствующие интенты. Что-то, про интенты нажатия клавиш я не слыхал. Может подскажете :).
Формировать интенты в активити, которое слушает клавиши не вариант. Активити спит, когда тело заблокировано.

Ответить