Форум программистов, компьютерный форум, киберфорум
Наши страницы

BroadcastReceiver + static переменная - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Веб-приложение в Java http://www.cyberforum.ru/android-dev/thread1718130.html
Всем привет. Образовалась проблема. Создаю веб приложение с применением ExtJS. Пишу код, а идея подчеркивает launch. Не понимаю почему.Когда навожу на него, вылазит сообщение "Unused property...
Программирование Android Обмен данными между Activity (одна глобальная переменная) Добрый день, товарищи. Мой путь в андроиде только начинается, поэтому элементарные для Вас вещи кажутся непонятными для меня. Есть три Activity. есть переменная int x = 5; В первой Activity... http://www.cyberforum.ru/android-dev/thread1718070.html
Apk tool и декомпиляция андроид приложений Программирование Android
Добрый день! Пытаюсь декомпилировать фонарик Color Flashlight.apk при помощи утилиты Apk tool, но полной декомпиляции не получаю. Появляется папка, где расположена куча файлов- только разметка...
Программирование Android Как сделать проверку памяти перед скачиванием файла
Добрый день. Сделал AsyncTask отдельным файлом.Скачиваю фаил, появляется ProgressDialog идет процесс закачки на карту, все работает. Задумка такая: как сделать проверку перед началом скачивания ...
Программирование Android Как создать подобные меню? http://www.cyberforum.ru/android-dev/thread1717864.html
Интересует создание подобных меню. Как их сделать? Особенно "выберите файл для экспорта", где можно ввести своё имя сохраняемого файла.
Программирование Android Android TextView в блоке ListView Добрый ночи. Такая проблема возникла вот код <TextView android:layout_width="match_parent" android:id="@+id/testtext" ... подробнее

Показать сообщение отдельно
Delphian
0 / 0 / 0
Регистрация: 14.08.2012
Сообщений: 138

BroadcastReceiver + static переменная - Программирование Android

22.04.2016, 14:09. Просмотров 214. Ответов 3
Метки (Все метки)

Работая с бродкаст ресивером задался вопросом, как же он всё-таки работает?) Есть следующий код, который фиксирует состояние телефонного звонка, в первую очередь, входящего:

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
public class CallReceiver extends BroadcastReceiver {
 
    private static String mLastState="Unknown last state";
    private String phoneState="Unknown phone state";
    private static boolean incomingCall=false;
 
 
    @Override
    public void onReceive(Context context, Intent intent) {
       phoneState = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
        if(intent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL")){
            LOG.debug("Outgoing call");
        }else {
            LOG.debug("Incoming call"+" "+String.valueOf(incomingCall));
        if(!mLastState.equals(phoneState)){
         switch (phoneState){
            case("RINGING"):
                incomingCall=true;
                mLastState="RINGING";
                LOG.debug("RINGING");
                break;
            case("OFFHOOK"):
                if(incomingCall) {
                    mLastState = "OFFHOOK";
                    LOG.debug("OFFHOOK");
                }
                break;
            case("IDLE"):
                if(incomingCall){
                     mLastState="IDLE";                   
                     incomingCall=false;
                     LOG.debug("IDLE");
                }
                break;
          }
         }
        }
    }
}
Если абонент звонит, мы получаем следующие логи:

main: [Incoming call false]
main: [RINGING] - звонит телефон
main: [Incoming call true]
main: [OFFHOOK] - подняли трубку и разговаривают
main: [Incoming call true]
main: [IDLE] - завершили разговор
main: [Incoming call false]

И вот, что меня смутило это состояние статичной переменной incomingCall. Когда первый раз срабатывает бродкаст ([RINGING]) он все переменные инициализирует (incomingCall=false) и затем выполняется onReceive и мы получаем incomingCall=true. При втором срабатывании ([OFFHOOK]) он уже берёт из статичной переменной, а не инициализирует static поле (incomingCall=false); хотя между этими событиями может пройти время и дальше тоже самое происходит с третьим срабатыванием ([IDLE]).

Отсюда вопрос как происходит инициализация переменных при срабатывании броадкастресивера? Что будет со статичными переменными? Инициализирует ли броадкаст переменные каждый раз или срабатывает только метод onReceive?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.