我试图找到任何方式来接听我的电话,但我无法得到任何解决方案。我使用了BroadcastReceiver,TelephonyManager和PhoneStateLinstener但我无法获得RINGING状态以进行传出呼叫。我还尝试将呼叫记录读取为当前呼叫的搜索持续时间,但是呼出呼叫的呼叫记录在完成后保存。
我已经读过公共API是不可能的。听起来有可能以不同的方式使用内部API。我认为会有一些方法可以做到这一点,因为我可以在市场上看到这类应用。
请给我任何线索并分享您的知识。
感谢。
答案 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,电话未接听。此外,电话已得到解答。
希望这会对你有所帮助。