Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/24: Рейтинг темы: голосов - 24, средняя оценка - 4.88
Maksim2309
45 / 45 / 15
Регистрация: 17.01.2013
Сообщений: 328
1

Мониторинг входящих звонков

17.02.2014, 09:07. Просмотров 4309. Ответов 5
Метки нет (Все метки)

Добрый вечер! Уважаемые форумчане выручайте. Нашел код мониторинга на хабре. Хотел чтобы при вызове номер выводился в TextView, но тут облом. Подскажите как реализовать пожалуйста? Вот код:
Activity:
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
package com.example.conder;
 
import android.os.Bundle;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import android.view.Menu;
import android.widget.TextView;
 
public class MainActivity extends Activity {
    
    public static final String TAG = null;
    TextView tx1;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tx1 = (TextView) findViewById(R.id.textv);      
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
    String phoneNumber = "";
 
    public class CallReceiver extends BroadcastReceiver {
        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");
            } 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)) {
                    //телефон звонит, получаем входящий номер
                    phoneNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
                    tx1.setText(phoneNumber);
                } else if (phone_state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){
                    //телефон находится в режиме звонка (набор номера / разговор)
                } else if (phone_state.equals(TelephonyManager.EXTRA_STATE_IDLE)){
                    //телефон находиться в ждущем режиме. Это событие наступает по окончанию разговора, когда мы уже знаем номер и факт звонка
                }
            }
        }
    }
 
}
Manifest:
XML
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
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.conder"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="18" />
    
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
    
    <receiver android:name="CallReceiver">
    <intent-filter>
        <action android:name="android.intent.action.PHONE_STATE"/>
        <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> 
    </intent-filter>    
    </receiver>
    
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.conder.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
 
</manifest>
Как я понял он срабатывает при входящем звонке, но номер не отображается. Заранее спасибо!

Добавлено через 7 часов 58 минут
Здравствуйте! День 2. Решил попробовать позвонить со своего номера по нажатию на кнопку. Вот код:
Java
1
2
3
// Сразу звонит на 3300052
Uri callUri = Uri.parse("tel:3300052");
Intent callIntent= new Intent(Intent.ACTION_CALL, callUri);
Не работает

Добавлено через 14 минут
Цитата Сообщение от Maksim2309 Посмотреть сообщение
Не работает
С вызовом разобрался, а вот как входящий определять пока не очень. Выручайте
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2014, 09:07
Ответы с готовыми решениями:

Журнал звонков
Задали в универе на защиту информации сделать типо вирус чтобы получить журнал...

Переадресация звонков
Хочу написать прогу, которая будет переадресовывать звонок с мобилы на ноут....

Обработка телефонных звонков
есть ли какой нибудь обработчик телефонных звонков?? Ну чтобы можно было...

Список пропущенных звонков
Доброго времени суток! Имеется вот такой метод. public String inform (){ ...

Отправка звонков на сервер
Всем привет подскажите как сделать приложение чтоб все входящие звонки...

5
angryrobot
Командир зеленых роботов
348 / 285 / 54
Регистрация: 08.10.2013
Сообщений: 565
17.02.2014, 10:00 2
Цитата Сообщение от Maksim2309 Посмотреть сообщение
а вот как входящий определять пока не очень. Выручайте
Очень похоже, что ваш бродкастресивер не ловит интенты. По моему мнению, это происходит из-за того, что CallReceiver это вложенный класс. Есть два варианта решения вашей проблемы:
1) Класс CallReceiver вытащить в отдельный файл, в манифесте вместо строчки
<receiver android:name="CallReceiver">
написать
<receiver android:name=".CallReceiver">

2) Прямо в классе MainActivity создать экземпляр класса CallReceiver и зарегистрировать этот бродкастресивер.
1
Maksim2309
45 / 45 / 15
Регистрация: 17.01.2013
Сообщений: 328
17.02.2014, 12:32  [ТС] 3
Цитата Сообщение от angryrobot Посмотреть сообщение
зарегистрировать этот бродкастресивер.
Подскажите как его зарегистрировать пожалуйста...

Добавлено через 1 час 59 минут
Сделал так:
MainActivity.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
package com.example.conder;
 
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;
 
public class MainActivity extends Activity {
    
    public static final String TAG = "Я звоню";
    TextView tx1;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tx1 = (TextView) findViewById(R.id.textv);
        tx1.setText("Входящий номер:");
        CallReceiver myCall = new CallReceiver();
        Log.i(TAG, myCall.phoneNumber.toString());
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
}
CallReceiver.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
package com.example.conder;
 
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import android.util.Log;
 
public class CallReceiver extends BroadcastReceiver {
    public String phoneNumber = "";
    
    @Override
    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");
                } 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)) {
                        //телефон звонит, получаем входящий номер
                        phoneNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
                        Log.d("Zvonok", phoneNumber);
                        } else if (phone_state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){
                        //телефон находится в режиме звонка (набор номера / разговор)
                    } else if (phone_state.equals(TelephonyManager.EXTRA_STATE_IDLE)){
                        //телефон находиться в ждущем режиме. Это событие наступает по окончанию разговора, когда мы уже знаем номер и факт звонка
                    }
                }
            }
}
Manifest:
XML
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
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.conder"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="18" />
    
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
    
    <receiver android:enabled="true" android:name=".CallReceiver">
    <intent-filter>
        <action android:name="android.intent.action.PHONE_STATE"/>
        <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> 
    </intent-filter>    
    </receiver>
    
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.conder.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
 
</manifest>
Ничего не происходит... Где опять ошибка тыкните пожалуйста...
0
angryrobot
Командир зеленых роботов
348 / 285 / 54
Регистрация: 08.10.2013
Сообщений: 565
17.02.2014, 12:36 4
Лучший ответ Сообщение было отмечено Maksim2309 как решение

Решение

Цитата Сообщение от Maksim2309 Посмотреть сообщение
Подскажите как его зарегистрировать пожалуйста
Вот так попробуйте
Java
1
2
3
4
5
6
7
8
        CallReceiver callRecv = new CallReceiver();
        IntentFilter filter = new IntentFilter();
        filter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED);
        filter.addAction(Intent.ACTION_NEW_OUTGOING_CALL);
        registerReceiver(callRecv, filter);
        
        //А для разрегистрации сделать следующее (в методе onDestroy)
        unregisterReceiver(callRecv);
1
Maksim2309
45 / 45 / 15
Регистрация: 17.01.2013
Сообщений: 328
17.02.2014, 13:17  [ТС] 5
Спасибо Вам огромное

Добавлено через 33 минуты
Цитата Сообщение от Maksim2309 Посмотреть сообщение
Спасибо Вам огромное
А не подскажете еще как бросить трубку если звонит определенный номер? Заранее спасибо
0
angryrobot
Командир зеленых роботов
348 / 285 / 54
Регистрация: 08.10.2013
Сообщений: 565
17.02.2014, 13:40 6
Цитата Сообщение от Maksim2309 Посмотреть сообщение
А не подскажете еще как бросить трубку если звонит определенный номер?
Я никогда такого не пробовал, но вот нагуглил пример кода.
http://stackoverflow.com/questions/1...rogramatically
1
17.02.2014, 13:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2014, 13:40

Несколько звонков из одного окна
Добрый день! Я сейчас делаю страницу &quot;Контакты&quot; в своем приложении. Там есть...

Запись звонков через ядро
Доброго времени суток. Может кто-то знает, как писать аудио поток с линии не...

Программно задать сим карту для звонков
Как можно программно задать сим карту для звонков? Например у меня стоит...


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

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

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