Я пытаюсь создать приложение, которое регистрирует, когда я принимаю и отклоняю вызовы.Поэтому я использую PhoneStateListener.
Когда я запускаю прослушиватель методом onCreate()
, через некоторое время он прекращает свою деятельность.Насколько я знаю, Android закрывает приложение, потому что оно не фокусируется.
Я пытался обойти это поведение при запуске службы.Весь код, который я написал, работает нормально и не убивается Android ... но PhoneStateListener не получает никаких событий.
Как я запускаю Службу:
public class RunningService extends IntentService {
/**
* A constructor is required, and must call the super IntentService(String)
* constructor with a name for the worker thread.
*/
public RunningService() {
super("RunningService");
}
/**
* The IntentService calls this method from the default worker thread with
* the intent that started the service. When this method returns,
* IntentService stops the service, as appropriate.
*/
@Override
protected void onHandleIntent(Intent intent) {
//...some code...creating a notification
startForeground(12345, notification);
TelephonyManager telephonyManager = (TelephonyManager) this
.getSystemService(TELEPHONY_SERVICE);
telephonyManager.listen(new PhoneStateListenerImpl(),
PhoneStateListener.LISTEN_CALL_STATE);
while (true) {
...some code to do...until Exit is called by user
}
}
}
PhoneStateListener с базовым выводом:
public class PhoneStateListenerImpl extends PhoneStateListener {
public PhoneStateListenerImpl() {
super();
Log.v("psListener", "constructor");
}
@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
Log.v("PhoneStateListener", "IDLE");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.v("PhoneStateListener", "OFFHOOK");
break;
case TelephonyManager.CALL_STATE_RINGING:
Log.v("State", "Ringing");
break;
default: {
Log.v("Status", "something");
}
}
}
}
Я получаю вывод Log из конструктора Listeners, но всякий раз, когда что-то меняется (как, например, я звоню кому-то), ничего не происходит.onCreate()
отлично работает.
Может быть, я что-то упускаю
Я только что попытался: я попытался запросить у TelephonyManager состояние телефона в цикле while Службы.Это отлично работает.Но я думаю, это просто грязный обходной путь.
Кто-нибудь знает, в чем может быть проблема?