1

デバイスで送受信されたすべての VOIP 通話を傍受し、合計通話時間を計算する必要があります。

研究用の読み物を提案してもらえますか?

ありがとう、ばかい。

4

1 に答える 1

0

着信するすべての電話をチェックしたい場合は、BroadcastReceiver とメソッドを拡張でき@OverrideますonReceivePHONE_STATEマニフェスト ファイルで、インテント フィルター用のブロードキャスト レシーバーを登録する必要があります。これは、レシーバーが変更されるたびにトリガーされることを意味しますPHONE_STATE

次に、onReceiveメソッドでTelephonyManagerインスタンスを取得し、他の状態をチェックしてCALL_STATE_RINGING、呼び出しからオフフック、アイドル状態に戻るまでの時間を決定できます。これにより、通話時間の感覚が得られます。

ドキュメントは次のとおりです

これがマニフェストの例です

    <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 に答える