Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
alex_81
0 / 0 / 0
Регистрация: 09.08.2016
Сообщений: 2
#1

BroadcastReceiver, считывание состояние телефона - Программирование Android

09.08.2016, 13:57. Просмотров 380. Ответов 4
Метки нет (Все метки)

Добрый день!

Создал вот такой класс, для считывания состояния телефона во время звонка.

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
public class CallReceiver extends BroadcastReceiver {
    String phoneNumber = "";
    private int id = 2;
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL")) {
            //получаем исходящий номер
            phoneNumber = intent.getExtras().getString("android.intent.extra.PHONE_NUMBER");
            id = 14;
        } else if (intent.getAction().equals("android.intent.action.PHONE_STATE")){
            String phone_state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
            if (phone_state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
                //телефон звонит, получаем входящий номер
                id = 10;
                phoneNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
            } else if (phone_state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){
                //телефон находится в режиме звонка (набор номера / разговор)
                id = 20;
            } else if (phone_state.equals(TelephonyManager.EXTRA_STATE_IDLE)){
                id = 30;
                //телефон находиться в ждущем режиме. Это событие наступает по окончанию разговора, когда мы уже знаем номер и факт звонка
            }
        }
    }
    public int getId() {
        id=id+1;
        return id;
    }
Зарегистрировал его в манифесте:
XML
1
2
3
4
5
6
7
8
9
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
        <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
 
  <receiver android:name="CallReceiver">
            <intent-filter android:priority="100">
                <action android:name="android.intent.action.PHONE_STATE"/>
                <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
            </intent-filter>
        </receiver>
Но звонки не обрабатываются методом onReceive. Почему так происходит?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2016, 13:57
Я подобрал для вас темы с готовыми решениями и ответами на вопрос BroadcastReceiver, считывание состояние телефона (Программирование Android):

Как сохранить состояние Service после перезагрузки телефона?
Как сохранить состояние Service после перезагрузки телефона??? т.е мне нужно...

BroadcastReceiver
У меня такой вопрос если я создал ресивер и прописал его в манифесте. Мой...

BroadcastReceiver и startActivity
У меня есть служба и BroadcastReceiver. Когда приходит событие, то я вызываю...

Уведомления в BroadcastReceiver
Привет, уважаемые! Прикрутил BroadcastReceiver, мониторю входящие смс, пытаюсь...

BroadcastReceiver + static переменная
Работая с бродкаст ресивером задался вопросом, как же он всё-таки работает?)...

Servise, BroadcastReceiver, Activity
Здравствуйте, есть сервис и активити, сервис возвращает данные активити через...

4
quadenes
2 / 2 / 1
Регистрация: 14.07.2015
Сообщений: 50
09.08.2016, 14:26 #2
alex_81, я могу ошибаться, но считывание состояния производится с помощью Telephonymanager, а в onReceive он не используется
0
Pablito
2652 / 2134 / 726
Регистрация: 12.05.2014
Сообщений: 7,450
Завершенные тесты: 1
09.08.2016, 14:33 #3
код рабочий, и метод onRecieve срабатывает
прилетают action с названием android.intent.action.PHONE_STATE
0
alex_81
0 / 0 / 0
Регистрация: 09.08.2016
Сообщений: 2
10.08.2016, 13:28  [ТС] #4
Тогда, согласно коду:
Java
1
2
3
if (phone_state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
                //телефон звонит, получаем входящий номер
                id = 10;
НО я в моей активити записываю в строку переменную id, через getId(). И после входящего звонка или исходящего звонка записывается только на единицу больше. Получается значения 10 или 20 не присваиваются.
0
Pablito
2652 / 2134 / 726
Регистрация: 12.05.2014
Сообщений: 7,450
Завершенные тесты: 1
10.08.2016, 13:46 #5
Цитата Сообщение от alex_81 Посмотреть сообщение
Получается значения 10 или 20 не присваиваются.
получается что ты знал что метод отрабатывает нормально, но для чего-то решил дезинформировать людей, которые пытались тебе помочь

Добавлено через 12 минут
если пошевелить мозгами то можно было бы в onRecieve первой строкой вписать вывод в лог и посмотреть какие именно строки прилетают по событию
getAction() будет возвращать android.intent.action.PHONE_STATE
а intent.getStringExtra(TelephonyManager.EXTRA_STATE); будет возвращать RINGING или IDLE
0
10.08.2016, 13:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2016, 13:46
Привет! Вот еще темы с решениями:

Виджеты, BroadcastReceiver и Строки
Здравствуйте. Занимаюсь созданием виджета. Делаю что то наподобие нажатия на...

Чтение preferences в BroadcastReceiver
Доброго времени суток. Сам смысл того что я делаю: есть активити, которая...

BroadcastReceiver, куда добавить код?
помогите понять часть статьи https://habrahabr.ru/post/234425/. добрался до...

Как заставить работать BroadcastReceiver?
Добрый день! Собственно идея: есть стандартный плеер телефона(HTC One m7...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru