Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
-13 / 0 / 0
Регистрация: 09.07.2015
Сообщений: 11

Обработка нажатий клавиш громкости непосредственно Service (Activity уже закрыто)

09.07.2015, 15:04. Показов 3872. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые форумчане!
Буду благодарен за любую помощь.

Написал добрую часть приложения для Android, состоящего из Активности и Сервиса.
Активность запускает Сервис, после чего пользователь самостоятельно переходит на любую стороннюю Активность. Сервис как и положено продолжает свою работу в фоне. Моя проблема заключается в том, что не знаю как заставить этот Сервис реагировать на нажатие пользователем клавиши на корпусе устройства, когда открыта сторонняя Активность или дисплей погашен и заблокирован сенсорный экран.
Цель работы - получить устройство которое находясь в ЛЮБОМ РЕЖИМЕ будет отсылать на сервер свои GPS координаты при всяком нажатии определённой клавиши.

Перечислю варианты которые и опробовал:

1. Через обработчики событий Активности. (Работает пока активность в фокусе)
2. Intent.ACTION_MEDIA_BUTTON. По аналогии с управлением номером трека в аудио плеере. (Метод работает, только до первого входящего звонка пока нет переключения на звуковой поток вызова. Во время разговора управлять сервисом возможности нет!)

Последняя идея - это в цикле опрашивать текущий статус (ON/OFF) клавиши, но возможно ли это в Android?

В общем рад принять ваш опыт!
Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.07.2015, 15:04
Ответы с готовыми решениями:

Обработка нажатий клавиш
У меня есть программа с несколькими потоками, один из них - это обработка нажатий клавиш, но я не знаю как при выходе из программы прервать...

Обработка нажатий клавиш
Есть у меня .net приложение и есть необходимость обрабатывать клавиатуру в чужом окне (thread id и hwnd у меня есть). Сказано - сделано,...

Обработка нажатий клавиш
подскажите как обрабатывать нажатия клавиш символов (цифры, буквы) в WinApi C++, служебные клавиши обрабатываются как то так: switch...

2
-13 / 0 / 0
Регистрация: 09.07.2015
Сообщений: 11
11.07.2015, 19:12  [ТС]
Товарищи программисты Android. Неужели здесь никто этого не знает?
0
-13 / 0 / 0
Регистрация: 09.07.2015
Сообщений: 11
18.07.2015, 15:45  [ТС]
Проблема решена управлением через клавишу Power.
По нажатию на клавишу Power 4 раза в течении 1-3 сек и сервис стабильно реагирует. Показываю для примера Android будет выводить короткий звук по команде от клавиши, и не важно заблокирован экран или нет, также не важно что сейчас делает пользователь. Пользователю не мешает ложных срабатываний нет. Проверенно на нескольких устройствах.

Принцип работы сводится к приёму intent от системы при реакции экрана на нажатие Power.

MyService.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package ru.domen.helooword;
 
 
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.util.Log;
 
 
public class MyService extends Service {
 
    final String LOG_TAG = "myLogs";
 
    int screen_status = 0;
    long screen_start_time = 0;
    long screen_max_time = 1250;  //Максимальное время между нажатиями
 
    BroadcastReceiver mScreenReceiver = new BroadcastReceiver() {
 
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (action.equals(Intent.ACTION_SCREEN_ON)) {
 
               if(screen_status == 0) {screen_start_time = System.currentTimeMillis();}
 
                screen_status++;  //Счётчик нажатий
 
                someTask();
 
            }
            if (action.equals(Intent.ACTION_SCREEN_OFF)) {
                if(screen_status == 0) {screen_start_time = System.currentTimeMillis();}
 
                screen_status++;
 
                someTask();
 
            }
        }
    };
 
 
    public void onCreate() {
        super.onCreate();
        Log.d(LOG_TAG, "onCreate");
    }
 
     public int onStartCommand(Intent intent, int flags, int startId) {
         Log.d(LOG_TAG, "onStartCommand");
 
         IntentFilter intentFilter =  new  IntentFilter ( Intent . ACTION_SCREEN_ON );
         intentFilter .addAction(Intent.ACTION_SCREEN_OFF );
         registerReceiver(mScreenReceiver, intentFilter);
 
         someTask();
 
        return super.onStartCommand(intent, flags, startId);
    }
 
    public void onDestroy() {
        super.onDestroy();
        Log.d(LOG_TAG, "onDestroy");
    }
 
    public IBinder onBind(Intent intent) {
        Log.d(LOG_TAG, "onBind");
        return null;
    }
 
    void someTask() {
 
        final MediaPlayer mp = MediaPlayer.create(this, R.raw.ooy);
        mp.setLooping(false);
 
//Обнуляем счётчик по превышению максимального времени между нажатиями 
if((System.currentTimeMillis() - screen_start_time) > (screen_max_time * screen_status) ) {screen_status = 0;}
 
                                     //Выводим звук или что нужно делаем
if(screen_status==3) {
 
    screen_status = 0;
 
    mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        public void onPrepared(MediaPlayer mp) {
     
            mp.start();
        }
    });
 
    mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        public void onCompletion(MediaPlayer mp) {
            mp.release();
        }
    });
 
}
 
}
Добавлено через 18 минут
Добавлю что в эмуляторе с такими настройками работает криво, т.к. эмулятор может тормозить. Я проверял на реальном устройстве.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.07.2015, 15:45
Помогаю со студенческими работами здесь

Обработка нажатий клавиш
Добрый день! Решил сделать небольшую обработку нажатий клавиш в приложении, списал один из распространённых примеров, но он не...

Обработка нажатий клавиш на клавиатуре
Здравствуйте. Как правильно обрабатывать нажатия клавиш на клавиатуре? Читаю Горнакова С.Г. - DirectX9. Уроки программирования на C++....

Обработка нажатий клавиш с glfw
Изучаю glfw. Задался вопросом обработки нажатий клавиш. Нашел функцию glfwGetKey(int key), где int key - номер клавиши по какому-то там...

Обработка нажатий клавиш в TextBox
Здравствуйте. Помогите пожалуйста с решением такой задачи. В TextBox должны вводится только запятые, как разделители дробных чисел. Т.е...

Обработка нажатий клавиш в консоли
C# Консольное выполнение клавиши А можно сделать консольное выполнение клавиши static void Main(string...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru