在android中检测拨出呼叫和呼叫挂断事件

时间:2011-03-31 08:23:27

标签: android state phone-call

我有一个要求,其中我想要检测与Android中的呼叫相关的两种事件

  1. 每当拨打电话时,我的应用程序都应该知道这个以及被叫号码
  2. 当电话挂断(由于成功/失败)时,我的应用程序应该知道这个以及挂断的原因
  3. 这在Android中可行吗?

3 个答案:

答案 0 :(得分:29)

你应该创建一个BroadcastReceiver:

public class CallReciever extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
                TelephonyManager.EXTRA_STATE_RINGING)) {

                // Phone number 
                String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);

                // Ringing state
                // This code will execute when the phone has an incoming call
        } else if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
                TelephonyManager.EXTRA_STATE_IDLE)
                || intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
                        TelephonyManager.EXTRA_STATE_OFFHOOK)) {

            // This code will execute when the call is answered or disconnected
        }

    }
}

您应该注册您的应用程序以在清单中收听这些意图:

<receiver android:name=".CallReciever" >
            <intent-filter>
                <action android:name="android.intent.action.PHONE_STATE" />
            </intent-filter>
 </receiver>

答案 1 :(得分:7)

有一个更简单的解决方案,只使用TelephonyManager和 PhoneStateListener。您甚至不必注册BroadcastReceiver。

public class MyPhoneStateListener extends PhoneStateListener {

    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
        switch (state) {
            //Hangup
            case TelephonyManager.CALL_STATE_IDLE:
                break;
            //Outgoing
            case TelephonyManager.CALL_STATE_OFFHOOK:
                break;
            //Incoming
            case TelephonyManager.CALL_STATE_RINGING:
                break;
        }
    }
}

并注册:

public static void registerListener(Context context) {
    ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).listen(new MyPhoneStateListener(),
            PhoneStateListener.LISTEN_CALL_STATE);
}

答案 2 :(得分:4)

您需要为以下意图操作创建接收器:

  1. 外拨电话 - ACTION_NEW_OUTGOING_CALL
  2. 致电挂断 - ACTION_PHONE_STATE_CHANGED
相关问题