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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Bringoff
СуперМодулятор
132 / 131 / 15
Регистрация: 03.11.2012
Сообщений: 974
#1

2 симкарты в смартфоне — отличия в поведении - Программирование Android

12.09.2014, 22:56. Просмотров 472. Ответов 0
Метки нет (Все метки)

Я перехвачиваю окончание входящего вызова. На телефоне с двумя симками код срабатывает только в случае, когда звонок на первую симку. Что делать?

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
package ua.bringoff.ringtonerandomizer.receiver;
 
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
 
import java.util.Date;
 
public abstract class PhonecallReceiver extends BroadcastReceiver {
 
    //The receiver will be recreated whenever android feels like it.  We need a static variable to remember data between instantiations
 
    private static int lastState = TelephonyManager.CALL_STATE_IDLE;
    private static Date callStartTime;
    private static boolean isIncoming;
    private static String savedNumber;  //because the passed incoming is only valid in ringing
 
 
    @Override
    public void onReceive(Context context, Intent intent) {
 
        //We listen to two intents.  The new outgoing call only tells us of an outgoing call.  We use it to get the number.
        if (intent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL")) {
            savedNumber = intent.getExtras().getString("android.intent.extra.PHONE_NUMBER");
        } else {
            String stateStr = intent.getExtras().getString(TelephonyManager.EXTRA_STATE);
            String number = intent.getExtras().getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
            int state = 0;
            if (stateStr.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
                state = TelephonyManager.CALL_STATE_IDLE;
            } else if (stateStr.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) {
                state = TelephonyManager.CALL_STATE_OFFHOOK;
            } else if (stateStr.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
                state = TelephonyManager.CALL_STATE_RINGING;
            }
 
 
            onCallStateChanged(context, state, number);
        }
    }
 
    //Derived classes should override these to respond to specific events of interest
    protected void onIncomingCallStarted(Context ctx, String number, Date start) {
    }
 
    protected void onOutgoingCallStarted(Context ctx, String number, Date start) {
    }
 
    protected void onIncomingCallEnded(Context ctx, String number, Date start, Date end) {
    }
 
    protected void onOutgoingCallEnded(Context ctx, String number, Date start, Date end) {
    }
 
    protected void onMissedCall(Context ctx, String number, Date start) {
    }
 
    //Deals with actual events
 
    //Incoming call-  goes from IDLE to RINGING when it rings, to OFFHOOK when it's answered, to IDLE when its hung up
    //Outgoing call-  goes from IDLE to OFFHOOK when it dials out, to IDLE when hung up
    public void onCallStateChanged(Context context, int state, String number) {
        if (lastState == state) {
            //No change, debounce extras
            return;
        }
        switch (state) {
            case TelephonyManager.CALL_STATE_RINGING:
                isIncoming = true;
                callStartTime = new Date();
                savedNumber = number;
                onIncomingCallStarted(context, number, callStartTime);
                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                //Transition of ringing->offhook are pickups of incoming calls.  Nothing done on them
                if (lastState != TelephonyManager.CALL_STATE_RINGING) {
                    isIncoming = false;
                    callStartTime = new Date();
                    onOutgoingCallStarted(context, savedNumber, callStartTime);
                }
                break;
            case TelephonyManager.CALL_STATE_IDLE:
                //Went to idle-  this is the end of a call.  What type depends on previous state(s)
                if (lastState == TelephonyManager.CALL_STATE_RINGING) {
                    //Ring but no pickup-  a miss
                    onMissedCall(context, savedNumber, callStartTime);
                } else if (isIncoming) {
                    onIncomingCallEnded(context, savedNumber, callStartTime, new Date());
                } else {
                    onOutgoingCallEnded(context, savedNumber, callStartTime, new Date());
                }
                break;
        }
        lastState = state;
    }
}
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
package ua.bringoff.ringtonerandomizer.receiver;
 
import android.content.Context;
import ua.bringoff.ringtonerandomizer.util.ToneChanger;
 
import java.util.Date;
 
/**
 * Created by Bringoff on 08.09.2014.
 */
public class CallReceiver extends PhonecallReceiver {
    private ToneChanger mToneChanger;
 
    @Override
    protected void onIncomingCallStarted(Context ctx, String number, Date start) {
        super.onIncomingCallStarted(ctx, number, start);
    }
 
    @Override
    protected void onIncomingCallEnded(Context ctx, String number, Date start, Date end) {
        super.onIncomingCallEnded(ctx, number, start, end);
        mToneChanger = new ToneChanger(ctx);
        mToneChanger.changeRingtone(true, false);
    }
 
    @Override
    protected void onMissedCall(Context ctx, String number, Date start) {
        super.onMissedCall(ctx, number, start);
        mToneChanger = new ToneChanger(ctx);
        mToneChanger.changeRingtone(true, false);
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2014, 22:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос 2 симкарты в смартфоне — отличия в поведении (Программирование Android):

Различия в поведении MediaPlayer в разных версиях ОС - Программирование Android
ситуация: простое приложение для воспроизведения аудиопотока интернет-радиостанции, используется MediaPlayer. код, которым...

Вспышка на смартфоне - Программирование Android
Подскажите плиз как заставить вспышку мигать. При этом в определенном такте? Куда копать?

На эмуляторе работает, а в смартфоне нет - Программирование Android
Подскажите, в чём ошибка? В android sdk работает, а в смарте нет. А должен просто появится один символ на экране, и переместиться...

Онлайн вебинар на смартфоне и планшете - Программирование
Здравствуйте! У меня такая проблемка: У нас на рабочем сайте есть раздел с онлайн - вебинарами (семинары). Пользователь ведет вебинар,...

Нужно ли что - нибуть устанавливать на смартфоне для запуска Native Activity? - Программирование Android
Ну вопрос в шапке. Нужно ли на сам смартфон с андройдом что - то доставлять, чтоб на нём запускалась игра, созданная при помощи NDK?

Начать съемку на заблокированном смартфоне при удерживании кнопки "Выкл" - Программирование Android
Обращаюсь ко всем разработчикам Android приложений. Реально ли написать следующее приложение. У каждого стандартного смартфона...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2014, 22:56
Привет! Вот еще темы с ответами:

Android studio, как запускать программу сразу на android смартфоне подключенному к usb? - Программирование Android
android studio, как запускать программу сразу на android смартфоне подключенному к usb?

Отличия drawable от Bitmap - Программирование Android
Чем отличается drawable от Bitmap?

Отличия в работе ArrayAdapter - Программирование Android
Что то не понятное с ArrayAdapter на Android 2.3, У меня есть EditText в списке, меняя значение одного, меняются все. На Android >= 4.0 все...

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


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

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

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