如何检测已拨电话

时间:2013-02-09 11:55:18

标签: android call

我试图找到任何方式来接听我的电话,但我无法得到任何解决方案。我使用了BroadcastReceiver,TelephonyManager和PhoneStateLinstener但我无法获得RINGING状态以进行传出呼叫。我还尝试将呼叫记录读取为当前呼叫的搜索持续时间,但是呼出呼叫的呼叫记录在完成后保存。

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

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

感谢。

2 个答案:

答案 0 :(得分:0)

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

1)注册OutGoingCallReceiver(在SO上搜索意图行动)

2)注册PhoneStateChangeReceiver(意图行动: - ACTION_PHONE_STATE_CHANGED

3)在SharedPrefernces或全球variable中创建一个标记。

4)在OutgoingCallReceiver中将此标志设为true,现在当选择调用时,将CALL_STATE_OFFHOOK中的状态设为PhoneStateChangeReceiver, 所以你可以弄清楚这是来电挂钩还是外拨电话挂钩。在适当的地方禁用标志。

您还可以节省挂钩时间。

答案 1 :(得分: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();
}

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

您可以查看时间是否为00:00,电话未接听。此外,电话已得到解答。

希望这会对你有所帮助。