Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Кто нибудь получил хотя бы символическую плату от гугл плей? http://www.cyberforum.ru/android-dev/thread1496039.html
Не могу сейчас проверить, но раньше на гугл плей разработчик помимо цены и страны на вкладке Россия мог выставить галки на Билайн и Мегафон. Есть информация что это значит? Кто нибудь получил хотя бы символическую плату от гугл плей? (все эти американские счета и прочая муть, например на ограничение по сумме (по моему менее 100 долларов снять нельзя) делают невозможным любую возможность :)) ...
Android Существует ли ограничение на количество ImageView? Мне надо чтоб на екране отрисовывалось следующее: Фон и на нем комбинация из 4 рисунков. У 4 рисунков естественно фон прозрачный. Я хотел это сделать просто добавив 5 ImageView то есть чтоб просто 5 слоев было и на каждом нужный рисунок, а они потом визуально в нужную картину складывались, но столкнулся с такой проблемой: при использовании более 3 елементов Вью приложение не запускается выбивая... http://www.cyberforum.ru/android-dev/thread1495981.html
Android Не происходит переход по ссылке
Как сделать текстовую ссылку в android studio? Пример <a href="google.com">какой-то текст</a> Только с Textview нужно так Делал текст кликабельным, autoLink="web", linksClickable="true", в string писал строку <string name="site"> <a href="google.com">какой-то текст</a> </string> Но все бестолку. Текст подчеркивается ссылкой, но переход по нему на сайт невозможен
Android Определение стиля внутри темы
Здравствуйте. В своей программе использую FlyOutMenu https://github.com/garuma/FlyOutMenu Там FrameLayout (С надписью My App) имеет красный, непрозрачный фон. В моем приложении имеется возможность выбирать светлую или темную тему. <?xml version="1.0" encoding="utf-8"?> <resources> <style name="BlackTheme" parent="android:style/Theme.Holo"> </style> <style name="WhiteTheme" ...
Android Как по byte[] data узнать размер снимка? http://www.cyberforum.ru/android-dev/thread1495907.html
урок http://startandroid.ru/ru/uroki/vse-uroki-spiskom/266-urok-133-kamera-delaem-snimok-i-pishem-video.html строка public void onPictureTaken(byte data, Camera camera) Как узнать размер снимка ширина, высота по byte data ?
Android Возможно ли вставить спан в edit text? Делал я делал и вот новый вопрос. Возможно ли запихать спан в edit text не прибегая к EditText.setTex();?(доставляет уйму неприятностей) подробнее

Показать сообщение отдельно
RUS_
-13 / 0 / 0
Регистрация: 09.07.2015
Сообщений: 11
18.07.2015, 15:45  [ТС]     Обработка нажатий клавиш громкости непосредственно Service (Activity уже закрыто)
Проблема решена управлением через клавишу 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 минут
Добавлю что в эмуляторе с такими настройками работает криво, т.к. эмулятор может тормозить. Я проверял на реальном устройстве.
 
Текущее время: 03:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru