如何检测来电回答

问题描述:

我想找到任何方式给我的去电回答,但我无法得到任何解决方案。我使用了BroadcastReceiver,TelephonyManager和PhoneStateLinstener,但我无法获得RINGING状态的传出呼叫。我也尝试读取通话记录以搜索当前通话的持续时间,但通话记录中的通话在完成后保存。如何检测来电回答

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

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

谢谢。

尝试下面的内容。我做了那么久。

1)注册一个OutGoingCallReceiver(SO上搜索意图的行动)

2)注册一个PhoneStateChangeReceiver(意向行动: - ACTION_PHONE_STATE_CHANGED

3)创建一个标志,在SharedPrefernces或全球variable

4)请在OutgoingCallReceiver这个标志真的,现在当通话将被采摘ü会在PhoneStateChangeReceiver获得状态CALL_STATE_OFFHOOK, ,这样你们可以计算出,如果这是来电钩或呼出大呼过瘾。在适当的地方禁用标志。

您还可以节省挂机时间。

+0

感谢您的回复,它总比没有好。但是......你的回答不是我想要的。我想要得到我的电话被回答的信号/事件。 – sunghun 2013-02-10 05:16:34

+0

所以如果状态是OFF_HOOK意味着呼叫被应答。 – AAnkit 2013-02-10 09:23:19

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

我想你可以在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,电话没有回答。否则电话被回答。

希望这可以帮助你。