1

我知道这是一个被问到的问题。通过使用广播接收器和使用 android.intent.action.PHONE_STATE

在接收器标签中,您可以了解手机的操作。但是如何识别是来电还是去电呢?

这是我的代码

@Override
public void onReceive(Context context, Intent intent) 
{
    this.context = context ;
    System.out.println(":::called onReceiver:::");
    TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    telephony.listen(phoneCallListener, PhoneStateListener.LISTEN_CALL_STATE);
}
private final PhoneStateListener phoneCallListener = new PhoneStateListener() 
{
        @Override
        public void onCallStateChanged(int state, String incomingNumber) 
        {
            switch(state)
            {
            case TelephonyManager.CALL_STATE_RINGING:
                 isRinging = true;
                 break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                 if (isRinging) 
                 {
                     hasAttended = true ;
                     isRinging = false;
                 } 
                 break;
            case TelephonyManager.CALL_STATE_IDLE:
                 if (hasAttended)
                 {
                     isCallEnded = true ;
                     hasAttended = false;
                 }
                 break;
            }
            if(isCallEnded)
            {
                isCallEnded=false;
                Intent callIntent = new Intent(context.getApplicationContext(),MyActivity.class);
                callIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(callIntent);
            }
            super.onCallStateChanged(state, incomingNumber);
        }
    };

这里每次创建一个phoneCallListener对象,每次将onCallStateChanged的调用率增加一..

4

1 回答 1

1

是一个方便的教程,它同时使用广播接收器和使用 android.intent.action.PHONE_STATE,根据调用状态创建不同的 toast。当你得到这个工作时,你将能够操纵代码在来电或去电时做你想做的事

首先你的班级必须extend BroadcastReceiver

接下来,您必须创建一个方法来侦听电话状态...PhoneStateListener它将在电话状态更改时进行侦听

switch case然后根据是来电还是去电做一个简单的接听电话

编辑

您需要做的就是编写一些代码来检查之前的状态是否为“响铃”。如果当前状态是空闲并且之前的状态是响铃,他们取消/错过了呼叫。如果当前状态是摘机而之前的状态是振铃,他们会接听电话。

switch(state){
        case TelephonyManager.CALL_STATE_RINGING:
             Log.i(LOG_TAG, "RINGING");
             wasRinging = true;
             break;
        case TelephonyManager.CALL_STATE_OFFHOOK:
             Log.i(LOG_TAG, "OFFHOOK");

             if (!wasRinging) {
                 // Start your new activity
             } else {
                 // Cancel your old activity
             }

             // this should be the last piece of code before the break
             wasRinging = true;
             break;
        case TelephonyManager.CALL_STATE_IDLE:
             Log.i(LOG_TAG, "IDLE");
             // this should be the last piece of code before the break
             wasRinging = true;
             break;
    }
于 2012-05-23T11:34:37.127 回答