【问题标题】:How to detect ougoing call answered如何检测拨出电话已接听
【发布时间】:2013-02-09 11:55:17
【问题描述】:

我正在尝试寻找任何方法来接听我的拨出电话,但我找不到任何解决方案。我使用了 BroadcastReceiver、TelephonyManager 和 PhoneStateLinstener,但我无法获得拨出电话的 RINGING 状态。我还尝试读取通话记录以搜索当前通话的持续时间,但拨出通话的通话记录在完成后保存。

我读过公共 API 是不可能的。听起来有可能以不同的方式,例如使用内部 API。我认为会有一些方法可以做到这一点,因为我可以在市场上看到这类应用程序。

请给我任何线索并分享你的知识。

谢谢。

【问题讨论】:

    标签: android call


    【解决方案1】:

    试试下面的方法。我早就这样做了。

    1) 注册一个OutGoingCallReceiver(对 SO 的搜索意图操作)

    2) 注册一个PhoneStateChangeReceiver(intent-Action:- ACTION_PHONE_STATE_CHANGED)

    3) 在SharedPrefernces 或全局variable 中创建一个标志。

    4) 在 OutgoingCallReceiver 中将此标志设为真,现在当呼叫将被接听时,您将在PhoneStateChangeReceiver 中获得CALL_STATE_OFFHOOK 的状态, 这样您就可以确定这是来电挂机还是去电挂机。在适当的地方禁用标志。

    您还可以节省 onHooked 时间。

    【讨论】:

    • 感谢您的回复,总比没有好。但是......你的答案不是我想要的。我想得到我的电话被接听的信号/事件。
    • 所以如果状态为 OFF_HOOK 表示呼叫已接听。
    【解决方案2】:

    我知道这个问题的答案很晚。但我今天遇到了它,并且有了一个想法,所以分享它。它可能会对将来访问该帖子的其他人有所帮助。

    我认为您可以在 PhoneStateListener 类的 onCallStateChanged 方法中查看上次通话的呼出时间。如果状态为 TelephonyManager.CALL_STATE_IDLE 的空闲状态,则获取数据。

    类似这样的:

    Cursor mCallCursor = context.getContentResolver().query(android.provider.CallLog.Calls.CONTENT_URI,null,null,null,null);
    int duration = mCallCursor.getColumnIndex( CallLog.Calls.DURATION);
    while(mCallCursor.moveToFirst())
    {   
        Toast.makeText(context, mCallCursor.getString(duration), Toast.LENGTH_LONG).show();
    }
    

    您可以找到更多关于 here 的信息。我还没有测试过上面的代码。但是这样的事情应该可以工作。

    您可以查看时间是否为 00:00,电话未被接听。否则电话已被接听。

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多