跟踪来电操作

时间:2012-05-23 11:29:45

标签: android call callstack

我知道这是一个问题。通过使用广播接收器和使用 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的调用率提高一个..

1 个答案:

答案 0 :(得分:1)

This是一个方便的教程,它使用广播接收器和使用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;
    }