Android 如何检测正在接听的电话

Android 如何检测正在接听的电话,android,call,Android,Call,我试图找到任何方法来接听我的呼出电话,但我找不到任何解决方案。我使用了BroadcastReceiver、TelephonyManager和PhoneStateLinstener,但无法获取传出呼叫的振铃状态。我还试图读取通话记录以搜索当前通话的持续时间,但传出通话的通话记录在通话结束后保存 我已经读到,使用公共API是不可能的。这听起来像是以不同的方式实现的,比如使用内部API。我认为会有办法做到这一点,因为我可以在市场上看到这些应用程序 请给我任何线索和分享你的知识 谢谢。试试下面的方法。我

我试图找到任何方法来接听我的呼出电话,但我找不到任何解决方案。我使用了BroadcastReceiver、TelephonyManager和PhoneStateLinstener,但无法获取传出呼叫的振铃状态。我还试图读取通话记录以搜索当前通话的持续时间,但传出通话的通话记录在通话结束后保存

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

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


谢谢。

试试下面的方法。我很久以前就这么做了

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

2) 注册一个
PhoneStateChangeReceiver
(意图操作:-
操作\u电话\u状态\u更改

3) 在
SharedPrefernces
或全局
变量中创建一个标志

4) 在Outgoing CallReceiver中设置此标志为真,现在当选择呼叫时,您将在
PhoneStateChangeReceiver
中获得状态为
call\u state\u OFFHOOK
, 所以你可以知道这是呼入电话挂接还是呼出电话挂接。在适当的位置禁用标志


你还可以节省时间。

我知道这个问题的答案已经很晚了。但我今天遇到了它,有了一个想法,所以分享它。它可能会帮助其他人谁访问该职位在未来

我认为您可以在PhoneStateListener类的onCallStateChanged方法中检查最后一次调用的传出调用时间。如果状态为idle(即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();
}
你可以找到更多关于这方面的信息。我还没有测试上面的代码。但这样做应该行得通

您可以检查时间是否为00:00,电话是否未接。否则电话就有人接了


希望这对您有所帮助。

谢谢您的回复,总比什么都没有好。但是你的答案不是我想要的。我想获得信号/事件,我的电话被接听。因此,如果状态为摘机,则表示电话被接听。