2013-10-05 2 views
1

Я получаю EXTRA_STATE_RINGING в два раза для одного вызова в android 4.1.2. Для версии ниже это отлично работает. Я пробовал с abortBroadcast и unRegisterBroadcast(), но ничего не работает с версией 4.1.2. Я искал другие подобные вопросы и пытался со всеми, но не получил никакого решения.Получение трансляции дважды для одного входящего вызова в 4.1.2

Заранее спасибо.

+0

Итак, вы хотели бы получить только одну трансляцию для одного звонка, не так ли? – Kristopher

+0

У меня есть решение, но это не правильный путь. Может быть, есть другое решение, но у меня не было решения. Поэтому я использовал это: я задал предпочтение в EXTRA_STATE_RINGING с помощью true и выполнил требуемую задачу, а затем снова установил это предпочтение с false, чтобы в следующий раз мой код не выполнялся. И на EXTRA_STATE_IDLE снова установите предпочтение с помощью true. –

ответ

2

Я испытал двойные трансляции на Google Nexus 4 (Android 4.2). Я работал над аналогичным решением (на основе SharedPreferences), но, как оказалось, он был ненадежным и, конечно же, был медленным из-за использования дискового ввода-вывода. Наконец, я создал Service, который был «заглушающим» обратным вызовом от BroadcastReceiver.

// Service 

boolean callInProgress; 

// listener callbacks 
public void onPhoneStateChange(boolean state) { 

if (state) { 
     if (!callInProgress) { 

      // do something when the first broadcast arrives. 
     callInProgress = true; 
    } 
} else { 
     callInProgress = false; 
     // called when the call ends. 
    } 

} 

// Service