1

我需要拦截从我的设备发出和接收的所有 VOIP 呼叫,并计算总通话时长。

你能推荐阅读材料来研究吗?

谢谢,巴凯。

4

1 回答 1

0

如果您想检查每个打来的电话,您可以扩展 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;
    }
}
于 2012-09-19T13:55:57.247 回答