1

我是Android的初学者,开发一个android应用程序来监视用户在通话时(对于来电和去电)的网络状态... ...如何获取拨出电话的通话状态?

我可以通过执行来监视网络状态在PhonestateListner类并覆盖onCallStateChanged方法,我使用的方法onCallStateChanged内TelephonyManager类定义的常量(CALL_STATE_IDLE,CALL_STATE_OFFHOOK和CALL_STATE_RINGING),但这些常量不用于呼出电话正常工作......

my question is 
  1. 如何监视c所有状态(RINGING,OFF_HOOK,IDLE)何时有呼出?
  2. 在Android中是否有任何API来监视传出呼叫的通话状态?如果是的话,请注明...

请帮我理解这个概念...感谢您的时间

+0

要做到这一点只要按照这个[链接]的最佳方式[1] [1]:http://stackoverflow.com/a/15564021/2492925 – 2013-10-19 09:57:18

回答

2

广播接收器与行动呼出android.intent.action.NEW_OUTGOING_CALLandroid.intent.action.PHONE_STATE

android.intent.action.NEW_OUTGOING_CALL将在发起呼出时广播。接收方意图将有一个额外的字符串变量Intent.EXTRA_PHONE_NUMBER,其中包含传出号码。这需要许可android.permission.PROCESS_OUTGOING_CALLS

要检测来电,请为广播接收器注册动作android.intent.action.PHONE_STATE。这将在电话状态发生变化时播放。接收意向将具有额外的字符串变量TelephonyManager.EXTRA_STATE,它描述了电话状态。如果这个状态是TelephonyManager.EXTRA_STATE_RINGING那么会有另一个额外的字符串变量TelephonyManager.EXTRA_INCOMING_NUMBER。这个变量包含传入的电话号码。请注意,当状态不是TelephonyManager.EXTRA_STATE_RINGING时,此变量将不存在。

2

下面的代码帮助你获得的净工作状态代码的onCreate

 StateListener phoneStateListener = new StateListener(); 
    TelephonyManager telephonyManager =(TelephonyManager)getSystemService(TELEPHONY_SERVICE); 
    telephonyManager.listen(phoneStateListener,PhoneStateListener.LISTEN_CALL_STATE); 

创建一个内部类监听电话的状态。

class StateListener extends PhoneStateListener { 
@Override 
public void onCallStateChanged(int state, String incomingNumber) { 
    super.onCallStateChanged(state, incomingNumber); 
    switch (state) { 
     case TelephonyManager.CALL_STATE_RINGING: 
      break; 
     case TelephonyManager.CALL_STATE_OFFHOOK: 
      System.out.println("call Activity off hook"); 
      LockScreenActivity.this.finish(); 
      break; 
     case TelephonyManager.CALL_STATE_IDLE: 
      break; 
    } 
} 
}; 

设置权限在manifest文件

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
+0

**请**,阅读http://stackoverflow.com/editing-help – brasofilo 2014-07-28 14:54:22