0

Я написал простой широковещательный приемник для блокировки вызовов с определенных номеров. Проблема, с которой я столкнулся, заключалась в том, что метод TelephonyManager.listen зарегистрировал несколько слушателей. Я понимаю, что я должен создать только один экземпляр PhoneStateListener внутри onReceive(). То, что я сделал. Но все же это не решило проблему. Ниже мой код.Android TelephonyManager.listen регистрирует несколько экземпляров слушателя

public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 
    this.context = context; 

    if(dbHelper == null) 
    { 
     dbHelper = new DBHelper(context); 
    } 

    if(telMan == null) 
    { 
     telMan = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 

    } 
    if(listener == null) 
    { 
     listener = new MyPhoneStateListener(); 
    } 
    telMan.listen(listener, PhoneStateListener.LISTEN_CALL_STATE); 
    rejectedNumbers = dbHelper.getNumbers(); 

} 

private class MyPhoneStateListener extends PhoneStateListener 
{ 

    public void onCallStateChanged(int state,String phoneNumber) 
    { 
     if(state == TelephonyManager.CALL_STATE_RINGING) 
     { 
      //rest of my code 
     } 
    } 
} 

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

P.S. Я решил проблему, отменив прослушивание в конце метода onReceive. Правильно ли это?

+0

использование сервис ... – Selvin

+0

первый вопрос-. Использование радиоприемник в сервисе дайте любое добавленное adavantage? потому что в случае изменения состояния телефона способ приема моего получателя будет вызван в любом случае. второй вопрос - использует сервис или не связан с моей проблемой? – Asu

+0

Прежде всего, вы не понимаете основы Android (компоненты приложения) ... вкратце: все за пределами onRecive в BroadcastRevicer плохо (не имеет смысла) ... поэтому вы должны начать сервис (wakefull one) и настроить прослушиватель там. ... и прекратите самообслуживание (сервис) + отмените регистрацию PhoneStateListener после '// остатка моего кода' – Selvin

ответ

0

Если вы не зарегистрировали приемник в конце вашего переопределенного метода, вы снова регистрируете его при втором вызове?