Я написал простой широковещательный приемник для блокировки вызовов с определенных номеров. Проблема, с которой я столкнулся, заключалась в том, что метод 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. Правильно ли это?
использование сервис ... – Selvin
первый вопрос-. Использование радиоприемник в сервисе дайте любое добавленное adavantage? потому что в случае изменения состояния телефона способ приема моего получателя будет вызван в любом случае. второй вопрос - использует сервис или не связан с моей проблемой? – Asu
Прежде всего, вы не понимаете основы Android (компоненты приложения) ... вкратце: все за пределами onRecive в BroadcastRevicer плохо (не имеет смысла) ... поэтому вы должны начать сервис (wakefull one) и настроить прослушиватель там. ... и прекратите самообслуживание (сервис) + отмените регистрацию PhoneStateListener после '// остатка моего кода' – Selvin