1

我有一个类,一个电话调用状态的监听器。在此,当呼叫断开此线路时,TelephonyManager.CALL_STATE_IDLE调用不止一次

case TelephonyManager.CALL_STATE_IDLE: 
Log.e(TAG, "CALL_STATE_IDLE"); 
break; 

执行一次以上。这严重影响了我的要求。如果有人知道这个问题,请帮助我。

在此先感谢

public class IncomingCallListener extends BroadcastReceiver 
     { 
      private Context mContext; 
      private static final String TAG = "CustomBroadcastReceiver"; 
     @Override 
     public void onReceive(Context context, Intent intent) 
     { 
      mContext = context; 
      TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
      CustomPhoneStateListener customPhoneListener = new CustomPhoneStateListener(); 
      telephony.listen(customPhoneListener, PhoneStateListener.LISTEN_CALL_STATE); 
      Bundle bundle = intent.getExtras(); 
      String phoneNr= bundle.getString("incoming_number"); 

     } 
     public class CustomPhoneStateListener extends PhoneStateListener 
      { 
       private static final String TAG = "CustomPhoneStateListener"; 

       @Override 
       public void onCallStateChanged(int state, String incomingNumber) 
       { 
       switch (state) 
       { 
        case TelephonyManager.CALL_STATE_RINGING: 
         if(!incomingNumber.equalsIgnoreCase("")) 
         { 
          Log.e(TAG, "CALL_STATE_RINGING"); 
         } 
         break; 
       case TelephonyManager.CALL_STATE_OFFHOOK: 
        Log.e(TAG, "CALL_STATE_OFFHOOK"); 
        break; 
       case TelephonyManager.CALL_STATE_IDLE: 
        Log.e(TAG, "CALL_STATE_IDLE"); 
        break; 
       default: 
        break; 
       } 
       super.onCallStateChanged(state, incomingNumber); 
      } 
     }  
    } 

回答

0

我改变一点点....这是工作代码...

public class IncomingCallListener extends BroadcastReceiver 
    { 
     private Context mContext; 
     private static final String TAG = "CustomBroadcastReceiver"; 
     TelephonyManager telephony; 
     CustomPhoneStateListener customPhoneListener ; 
     @Override 
     public void onReceive(Context context, Intent intent) 
     { 
      mContext = context; 
      Bundle extras = intent.getExtras(); 
      if (extras != null) { 
       String state = extras.getString(TelephonyManager.EXTRA_STATE); 
       Log.w("DEBUG", state); 

        telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
        customPhoneListener = new CustomPhoneStateListener(); 
        telephony.listen(customPhoneListener, PhoneStateListener.LISTEN_CALL_STATE); 
        Bundle bundle = intent.getExtras(); 
        String phoneNr= bundle.getString("incoming_number"); 


      } 


     } 
     public class CustomPhoneStateListener extends PhoneStateListener 
     { 
      private static final String TAG = "CustomPhoneStateListener"; 
      Handler handler=new Handler(); 
      @Override 
      public void onCallStateChanged(int state, String incomingNumber) 
      { 
       switch (state) 
       { 
       case TelephonyManager.CALL_STATE_RINGING: 
        if(!incomingNumber.equalsIgnoreCase("")) 
        { 
         //YOUR CODE HERE 

        } 
        break; 
       case TelephonyManager.CALL_STATE_OFFHOOK: 
        //YOUR CODE HERE 

        break; 
       case TelephonyManager.CALL_STATE_IDLE: 
        //YOUR CODE HERE 
        break; 
       default: 
        break; 
       } 
       super.onCallStateChanged(state, incomingNumber); 
       telephony.listen(customPhoneListener, PhoneStateListener.LISTEN_NONE); 
      } 


     }  
    } 
4

更改您的代码为:

public class IncomingCallListener extends BroadcastReceiver 
     { 
      private Context mContext; 

      private static final String TAG = "CustomBroadcastReceiver"; 
     @Override 
     public void onReceive(Context context, Intent intent) 
     { 
      mContext = context; 
      Bundle extras = intent.getExtras(); 
      if (extras != null) { 
      String state = extras.getString(TelephonyManager.EXTRA_STATE); 
      Log.w("DEBUG", state); 
      if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) 
      { 
       TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
       CustomPhoneStateListener customPhoneListener = new CustomPhoneStateListener(); 
       telephony.listen(customPhoneListener, PhoneStateListener.LISTEN_CALL_STATE); 
       Bundle bundle = intent.getExtras(); 
       String phoneNr= bundle.getString("incoming_number"); 
      } 
      else{ 
         if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) 
          { 
           // DO SOME CODE HERE... 
          } 
         else{ 
         if (state.equals(TelephonyManager.CALL_STATE_OFFHOOK)) 
          { 
           // DO SOME CODE HERE... 
          }       
         } 
      } 
     } 

    } 
//YOUR CODE HERE... 
+0

或者你可以使用'switch case'而不是'if-else ladder' –

+0

@Arwarrier:你想要什么? –

+0

它的工作原理,但安装后,当传入的呼叫来了,它断开连接,日志显示,CALL_STATE_IDLE一次。 再次来电,它显示日志'CALL_STATE_IDLE'次2次...并且它重复... 3次... 4次...等等等等......我不知道发生了什么...... – AndEngine