デバイスで送受信されたすべての VOIP 通話を傍受し、合計通話時間を計算する必要があります。
研究用の読み物を提案してもらえますか?
ありがとう、ばかい。
着信するすべての電話をチェックしたい場合は、BroadcastReceiver とメソッドを拡張でき@Override
ますonReceive
。PHONE_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;
}
}