Android拦截VoIP通话时长

时间:2012-09-17 15:06:04

标签: android sip voip

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

你能建议阅读材料进行研究吗?

谢谢, 扒开。

1 个答案:

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