如何获取拨出电话的通话状态?

时间:2013-03-08 05:18:51

标签: android android-activity telephonymanager android-broadcast

我是android的初学者,正在开发一个Android应用程序来监控用户通话时的网络状态(对于来电和去电)......

我可以通过实现PhonestateListner类并覆盖onCallStateChanged方法监视网络状态。对于传入调用,我使用onCallStateChanged方法内TelephonyManager类中定义的常量(CALL_STATE_IDLE,CALL_STATE_OFFHOOK和CALL_STATE_RINGING),但这些常量是拨打电话时工作不正常......

 my question is
  1. 如果有拨出电话,如何监控通话状态(RINGING,OFF_HOOK,IDLE)?
  2. android中是否有任何API来监控拨出电话的呼叫状态???如果是,请说明......
  3. 请帮助我理解这个概念......感谢您的时间

2 个答案:

答案 0 :(得分:3)

BroadcastReceiver,可以对拨打电话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注册BroadcastReceiver。当手机状态发生变化时,将播放此广告。接收意图将有一个额外的字符串变量TelephonyManager.EXTRA_STATE,用于描述电话状态。如果此状态为TelephonyManager.EXTRA_STATE_RINGING,则会有另一个额外的字符串变量TelephonyManager.EXTRA_INCOMING_NUMBER。此变量包含传入的电话号码。请注意,当状态不是TelephonyManager.EXTRA_STATE_RINGING时,此变量将不存在。

答案 1 :(得分: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" />