Android PhoneStateListener onPhoneStateChanged方法未从服务调用
我正在开发一个在后台运行并接听来电的应用程序 为此,我创建了一个在onHandleIntent方法中调用TelephonyManager.listen的服务 不幸的是,尽管调用了phonestatelistener的构造函数,但没有调用其onPhoneStateChanged方法 在活动中拨打相同的电话效果良好。我不知道问题可能是什么。我搜索过许多类似的帖子,但没有一个能令人满意地回答我的问题。因此,我提出这个问题 以下是我的服务和phonelistener实现:Android PhoneStateListener onPhoneStateChanged方法未从服务调用,android,android-service,phone-state-listener,Android,Android Service,Phone State Listener,我正在开发一个在后台运行并接听来电的应用程序 为此,我创建了一个在onHandleIntent方法中调用TelephonyManager.listen的服务 不幸的是,尽管调用了phonestatelistener的构造函数,但没有调用其onPhoneStateChanged方法 在活动中拨打相同的电话效果良好。我不知道问题可能是什么。我搜索过许多类似的帖子,但没有一个能令人满意地回答我的问题。因此,我提出这个问题 以下是我的服务和phonelistener实现: public class Ph
public class PhoneListenersService extends IntentService{
TelephonyManager tm;
CallStateListener callstatelistener;
public PhoneListenersService() {
super("PhoneListenersService");
// TODO Auto-generated constructor stub
}
@Override
protected void onHandleIntent(Intent intent) {
// TODO Auto-generated method stub
int count=0;
do
{
TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
TelephonyMgr.listen(new TeleListener(), PhoneStateListener.LISTEN_CALL_STATE);
Log.d("Count", ""+count++);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
while(count<100);
}
class TeleListener extends PhoneStateListener {
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
// CALL_STATE_IDLE;
Toast.makeText(getApplicationContext(), "CALL_STATE_IDLE",
Toast.LENGTH_LONG).show();
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
// CALL_STATE_OFFHOOK;
Toast.makeText(getApplicationContext(), "CALL_STATE_OFFHOOK",
Toast.LENGTH_LONG).show();
break;
case TelephonyManager.CALL_STATE_RINGING:
// CALL_STATE_RINGING
Toast.makeText(getApplicationContext(), incomingNumber,
Toast.LENGTH_LONG).show();
Toast.makeText(getApplicationContext(), "CALL_STATE_RINGING",
Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
}
公共类PhoneListenerService扩展了IntentService{
TelephonyManager tm;
CallStateListener CallStateListener;
公用电话侦听器服务(){
超级(“电话监听服务”);
//TODO自动生成的构造函数存根
}
@凌驾
受保护的手部内容无效(意图){
//TODO自动生成的方法存根
整数计数=0;
做
{
TelephonyManager TelephonyMgr=(TelephonyManager)getSystemService(电话服务);
TelephonyMgr.listen(新的TeleStener(),PhoneStateStener.listen\u CALL\u STATE);
Log.d(“计数”,“计数++);
试一试{
睡眠(100);
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
虽然(count没有选择,但我已经改变了我的方法。我使用带有意向服务的广播接收器来监听来电。以下是帮助某人的代码:-
public class PhoneListenersService extends IntentService{
TelephonyManager tm;
BroadcastReceiver receiver;
IntentFilter filter;
public PhoneListenersService() {
super("PhoneListenersService");
// TODO Auto-generated constructor stub
}
@Override
protected void onHandleIntent(Intent intent) {
// TODO Auto-generated method stub
//Intent
Filter filter=new IntentFilter();
filter.addAction("android.intent.action.PHONE_STATE");
//Create instance of BroadcastReceiver
receiver=new BroadcastReceiver()
{
@Override
public void onReceive(Context arg0, Intent intent) {
// TODO Auto-generated method stub
Bundle bundle = intent.getExtras();
if (bundle == null)
return;
// Incoming call
String state =
bundle.getString(TelephonyManager.EXTRA_STATE);
if ((state != null) &&
(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING)))
{
phoneNumber =
bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
//if phoneNumber is not blank get location details
if(!phoneNumber.isEmpty())
{
//Do work here
}
}
}
};
registerReceiver(receiver, filter);
} }
注意。IntentService是如何启动的?在哪个事件上?@MadhurAhuja您已使用StartService方法调用IntentService。单击按钮或类似形式的触发器即可调用StartService。