【发布时间】:2013-10-05 14:58:22
【问题描述】:
我想知道android APP是否有任何方法可以检测另一个人(不是设备所有者)接听电话的时间。换句话说,衡量我拨打一个号码和其他人接听它之间的时间。我想创建一个图表,例如:John 平均需要 5 秒接听电话,Jane 平均需要 8 秒等等。
谢谢!
【问题讨论】:
标签: android android-permissions
我想知道android APP是否有任何方法可以检测另一个人(不是设备所有者)接听电话的时间。换句话说,衡量我拨打一个号码和其他人接听它之间的时间。我想创建一个图表,例如:John 平均需要 5 秒接听电话,Jane 平均需要 8 秒等等。
谢谢!
【问题讨论】:
标签: android android-permissions
为 callstate 创建一个接收器,它会接收到每一个正在响铃、空闲和通话中的电话。我会在它开始响铃时获取系统时间,并在电话应答时与它进行比较。
public void onReceive(Context context, Intent intent) {
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
if(state.equals(TelephonyManager.EXTRA_STATE_RINGING)){
//Phone ringing
callTime = System.currentTimeMillis();
}else if(state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK){
//Call answered
answeredTime = System.currentTimeMillis();
timeTaken = answeredTime - callTime;
}else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)){
//Call rejected
}
}
这应该是一个开始
【讨论】:
STATE_RINGING 表示您的电话正在响铃,而不是您拨打了一个号码而接收电话正在响铃。
可能有一种使用MediaRecorder 的方法,但我在其他地方读到它是否有效取决于手机。此示例记录到文件中,但您可以重定向到流并在您的应用中处理音频。
不过,还有其他问题需要牢记。引用Lifehacker article:
[W]当您处理不是通过 VoIP 的电话时,您会危险地接近窃听法,这可能会变得复杂。
如果您有资源,通过 VOIP 重定向呼叫并从 VOIP 服务器记录可能会更容易。
编辑:尝试this link。它使用TelephonyManager 来检查呼叫状态是否从“响铃”变为“摘机”。
【讨论】: