0

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

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

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

谢谢。

4

2 回答 2

0

尝试如下所示。我很久以前就做过。

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

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

3)创建一个标志, inSharedPrefernces或 global variable

4) 在 OutgoingCallReceiver 中将此标志设为真,现在当呼叫被接听时,您将获得状态 CALL_STATE_OFFHOOKPhoneStateChangeReceiver因此您可以确定这是呼入呼叫挂起还是呼出呼叫挂起。在适当的地方禁用标志。

您还可以节省 onHooked 时间。

于 2013-02-09T12:13:26.737 回答
0

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

我认为您可以在 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();
}

您可以在此处找到更多相关信息。我没有测试上面的代码。但这样的事情应该有效。

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

希望这对您有所帮助。

于 2014-04-26T13:28:24.427 回答