Android 跟踪来电操作
我知道这是一个被问到的问题。通过使用广播接收机和 android.intent.action.PHONE\u状态 在receiver tag中,您可以了解手机的动作。但是,我如何识别这是一个传入呼叫还是传出呼叫 这是我的密码Android 跟踪来电操作,android,call,callstack,Android,Call,Callstack,我知道这是一个被问到的问题。通过使用广播接收机和 android.intent.action.PHONE\u状态 在receiver tag中,您可以了解手机的动作。但是,我如何识别这是一个传入呼叫还是传出呼叫 这是我的密码 @Override public void onReceive(Context context, Intent intent) { this.context = context ; System.out.println(":::called onRecei
@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的调用率每增加一次。是一个方便的教程,它使用广播接收器和android.intent.action.PHONE_状态,根据调用状态创建不同的祝酒词。当你得到这个工作,你将能够操纵代码做什么,你想当一个电话是传入或传出
首先,您的班级必须extend BroadcastReceiver
接下来,您必须创建一个方法来侦听电话状态PhoneStateListener
当手机状态更改时,它将侦听
然后做一个简单的switch case
,根据是呼入还是呼出来接听电话
编辑
您所需要做的就是编写一些代码来检查以前的状态是否为“ringing”。如果当前状态为空闲且前一状态为振铃,则他们取消/错过了呼叫。如果当前状态为offhook,而前一状态为ringing,则他们会接听电话
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;
}
这是一个方便的教程,既使用广播接收器,也使用android.intent.action.PHONE_状态,根据呼叫状态创建不同的祝酒词。当你得到这个工作,你将能够操纵代码做什么,你想当一个电话是传入或传出
首先,您的班级必须extend BroadcastReceiver
接下来,您必须创建一个方法来侦听电话状态PhoneStateListener
当手机状态更改时,它将侦听
然后做一个简单的switch case
,根据是呼入还是呼出来接听电话
编辑
您所需要做的就是编写一些代码来检查以前的状态是否为“ringing”。如果当前状态为空闲且前一状态为振铃,则他们取消/错过了呼叫。如果当前状态为offhook,而前一状态为ringing,则他们会接听电话
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;
}
您好。我特别想知道在什么情况下您可以将其称为传入呼叫(非未接来电)。即,如果state=TelephonyManager.call\u state\u响铃,则该呼叫为传入呼叫,但如何确定该呼叫是否有人接听或未接。我的目标是显示一个弹出根据结果,我已经添加了更多的代码,以回答应该检查是否有人接听或错过了电话。。。您可以简单地向代码中添加一个toast,它将根据发生的情况弹出,并将您想要的信息放入toast中。谢谢。它起作用了。我已重写onCallStateChanged()。但是这个方法被调用了很多次…(将近九次)。你能解释一下原因吗?我得看看代码,看看你到底在做什么来正确解释它。。。。但是onCallStateChanged()正在使用BroadcastReceiver。因此,每当调用状态发生更改时,总是会调用onCallStateChanged()。因此,如果按照我上面添加的代码,我们有三种调用状态..TelephonyManager.call_STATE_IDLE..TelephonyManager.call_STATE_OFFHOOK..TelephonyManager.call_STATE_Ring。。所以实际上应该只有三个调用,而不是九个,但是我不能说为什么在没有查看代码的情况下它会被调用九次。。试着调试看看它被调用了多少次,当我说“试着调试看看它被调用了多少次”时,我的意思是看onCallStateChanged()方法被调用了多少次,因为如果它被呼叫了3次,那就是3x3=9,给你你指的是9。我特别想知道在什么情况下你可以说它是来电(不是未接来电)。也就是说,如果state=TelephonyManager.call\u state\u RINGING,那么呼叫是来电,但是如何确定呼叫是有人接听还是未接。我的目标是显示一个弹出根据结果,我已经添加了更多的代码,以回答应该检查是否有人接听或错过了电话。。。您可以简单地向代码中添加一个toast,它将根据发生的情况弹出,并将您想要的信息放入toast中。谢谢。它起作用了。我已重写onCallStateChanged()。但是这个方法被调用了很多次…(将近九次)。你能解释一下原因吗?我得看看代码,看看你到底在做什么来正确解释它。。。。但是onCallStateChanged()正在使用BroadcastReceiver。因此,每当调用状态发生更改时,总是会调用onCallStateChanged()。因此,如果按照我上面添加的代码,我们有三种调用状态..TelephonyManager.call_STATE_IDLE..TelephonyManager.call_STATE_OFFHOOK..TelephonyManager.call_STATE_Ring。。所以实际上应该只有三个调用,而不是九个,但是我不能说为什么在没有查看代码的情况下它会被调用九次。。试着调试看看它被调用了多少次,当我说“试着调试看看它被调用了多少次”时,我的意思是看方法onCallStateChanged()被调用了多少次,因为如果它被调用了3次,那么它将是3x3=9,给出你所引用的9to@juli-你解决这个问题了吗?@NilayOnAndroid是的。。。代码是有效的。。但是我为phoneStateListener创建了一个singleton类,以获取相同的实例并设置booleanflags@juli-你解决这个问题了吗?@NilayOnAndroid是的。。。代码是有效的。。但是我为phoneStateListener创建了一个singleton类,以获取相同的实例并设置布尔标志