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