我正在尝试构建一个在接受和拒绝来电时记录的应用程序。因此我正在使用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");
}
}
}
}
我从Listeners构造函数中获取Log输出,但每当有什么变化时(比如我正在调用某人)都没有任何反应。
从onCreate()
启动的同一个监听器工作正常。
也许我错过了什么
我刚试过: 我试图在TelephonyManager中询问服务的while循环中的电话状态。这很好用。但我想这只是一个肮脏的解决方法。
有人知道可能是什么问题吗?
答案 0 :(得分:0)
您正在onHandleIntent上注册您的PhoneStateListener,而不是在onStartCommand或onCreate函数中注册了您的侦听器,并确保您在项目清单中提到了以下权限