2013-02-28 11 views
3

Я прочитал этот пост: Broadcast receiver onReceive() getting called multiple timesOnReceive вызывался несколько раз

Но я не нашел нужный ответ.

Я создал небольшую функцию полезности, которая переопределяет onReceive() BroadcastReceiver и отклоняет входящий вызов на основе определенных условий (что отлично работает).

Теперь, когда все условия совпадают, и я отклоняю вызов, я хотел бы сохранить это число в базе данных (что опять же является легкой задачей). Я хотел бы сохранить номер в базе данных после отклонения вызова. Но в журналах я замечаю, что после входящего вызова функция onReceive вызывается несколько раз. Если это так, я не хочу иметь несколько записей в моей БД.

Есть ли способ, с помощью которого onReceive() будет вызываться только один раз? Или любое обходное решение?

Спасибо за любую помощь

ответ

5

Ваш приемник будет вызван для трех различных state.on звона, на крюке и нерабочем состоянии.

Проверьте состояние телефона в onReceive. Вы можете отрезать вызов и сохранить в db, если его состояние звонит.

public void onReceive(final Context context, Intent intent) { 
    Bundle bundle = intent.getExtras(); 

    if (null == bundle) { 
     return; 
    } 

    String state = bundle.getString(TelephonyManager.EXTRA_STATE); 

    if (TelephonyManager.EXTRA_STATE_RINGING.equalsIgnoreCase(state)) { 
    //cut the call and store in db 
    return; 
    } 


    } 
    if(TelephonyManager.EXTRA_STATE_IDLE.equalsIgnoreCase(state)) { 
    return; 
    } 
    if(TelephonyManager.EXTRA_STATE_OFFHOOK.equalsIgnoreCase(state)){ 
    return; 
    } 

    } 
+0

ya .. вы правы .. но его не называют 3 раза. Он вызывается только дважды. 1. Однажды, когда звонок получен 2. После отмены звонка Спасибо, я сейчас проверю состояние. Также любые мысли о том, что этот код успешно работает на других телефонах и разных ОС? –

+0

@ Darshan, .. код будет работать – Rasel

+1

@ Rasel bundle будет пустым для меня. Что такое таль? – nAkhmedov

Смежные вопросы