我需要拦截从我的设备发出和接收的所有 VOIP 呼叫,并计算总通话时长。
你能推荐阅读材料来研究吗?
谢谢,巴凯。
如果您想检查每个打来的电话,您可以扩展 BroadcastReceiver 和@Override
方法onReceive
。在您的清单文件中,您必须为PHONE_STATE
意图过滤器注册广播接收器。这意味着每次PHONE_STATE
更改都会触发您的接收器。
然后,在您的onReceive
方法中,您可以获得一个TelephonyManager
实例,并检查CALL_STATE_RINGING
其他状态以确定从响铃到摘机再到空闲的时间。这将使您了解通话的持续时间。
这是文档:BroadcastReceiver
这是您的清单示例
<receiver android:name=".receivers.PhoneBroadcastReceiver" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
这是广播接收器的示例
@Override
public void onReceive(Context context, Intent intent) {
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
int callState = telephonyManager.getCallState();
Bundle extras = intent.getExtras();
if (extras == null) {
return;
}
String incomingNumber = extras.getString("incoming_number");
Log.d(TAG, "Receiving callStateChange: " + callState + " number: " + incomingNumber);
switch (callState) {
case TelephonyManager.CALL_STATE_RINGING :
processIncomingNumber(context, incomingNumber);
break;
case TelephonyManager.CALL_STATE_IDLE :
NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
nm.cancelAll();
break;
}
}