【问题标题】:Detect how much time does a person takes to pick up a call in Android检测一个人在Android中接听电话需要多少时间
【发布时间】:2013-10-05 14:58:22
【问题描述】:

我想知道android APP是否有任何方法可以检测另一个人(不是设备所有者)接听电话的时间。换句话说,衡量我拨打一个号码和其他人接听它之间的时间。我想创建一个图表,例如:John 平均需要 5 秒接听电话,Jane 平均需要 8 秒等等。

谢谢!

【问题讨论】:

    标签: android android-permissions


    【解决方案1】:

    为 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 表示您的电话正在响铃,而不是您拨打了一个号码而接收电话正在响铃。
    • 完全正确,我的意思是 STATE_OFF_HOOK,这意味着,至少存在一个正在拨号、活动或保持的呼叫,并且没有呼叫正在振铃或等待。我不确定它是否会连续两次调用 OFF_HOOK,但是您可以通过接收 ACTION_NEW_OUTGOING_CALL 来检测拨出电话。您也可以从那里获取系统时间。
    【解决方案2】:

    可能有一种使用MediaRecorder 的方法,但我在其他地方读到它是否有效取决于手机。此示例记录到文件中,但您可以重定向到流并在您的应用中处理音频。

    不过,还有其他问题需要牢记。引用Lifehacker article

    [W]当您处理不是通过 VoIP 的电话时,您会危险地接近窃听法,这可能会变得复杂。

    如果您有资源,通过 VOIP 重定向呼叫并从 VOIP 服务器记录可能会更容易。

    编辑:尝试this link。它使用TelephonyManager 来检查呼叫状态是否从“响铃”变为“摘机”。

    【讨论】:

    • 对,电话会检测对方何时接听电话。我的手机有触觉反应。我想知道应用程序是否有任何方法可以读取该状态。 VoIP 不是一种选择。
    • 我编辑了我的帖子,其中包含指向另一个 SO 问题的链接,该问题解释了一种更好的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    相关资源
    最近更新 更多