Android PhoneStateListener onPhoneStateChanged方法未从服务调用

Android PhoneStateListener onPhoneStateChanged方法未从服务调用,android,android-service,phone-state-listener,Android,Android Service,Phone State Listener,我正在开发一个在后台运行并接听来电的应用程序 为此,我创建了一个在onHandleIntent方法中调用TelephonyManager.listen的服务 不幸的是,尽管调用了phonestatelistener的构造函数,但没有调用其onPhoneStateChanged方法 在活动中拨打相同的电话效果良好。我不知道问题可能是什么。我搜索过许多类似的帖子,但没有一个能令人满意地回答我的问题。因此,我提出这个问题 以下是我的服务和phonelistener实现: public class Ph

我正在开发一个在后台运行并接听来电的应用程序

为此,我创建了一个在onHandleIntent方法中调用TelephonyManager.listen的服务

不幸的是,尽管调用了phonestatelistener的构造函数,但没有调用其onPhoneStateChanged方法

在活动中拨打相同的电话效果良好。我不知道问题可能是什么。我搜索过许多类似的帖子,但没有一个能令人满意地回答我的问题。因此,我提出这个问题

以下是我的服务和phonelistener实现:

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。