当我接听电话时如何获得活动
你能帮我理解如何检测是否接听来电(我需要记录从接听到接听的呼叫)? 我可以检测到来电但不是外拨。 所以请帮忙。
使用TelephonyManager.ActionPhoneStateChanged
监视TelephonyManager
状态,在收到TelephonyManager.ExtraStateIdle
您知道电话无线电现在何时空闲(没有正在进行的呼叫)。
入站和出站BroadcastReceiver示例:
[BroadcastReceiver(Name = "com.sushhangover.OutgoingCallBroadcastReceiver")] [IntentFilter(new[] { Intent.ActionNewOutgoingCall, TelephonyManager.ActionPhoneStateChanged })] public class OutgoingCallBroadcastReceiver : BroadcastReceiver { public override void OnReceive(Context context, Intent intent) { switch (intent.Action) { case Intent.ActionNewOutgoingCall: var outboundPhoneNumber = intent.GetStringExtra(Intent.ExtraPhoneNumber); Toast.MakeText(context, $"Started: Outgoing Call to {outboundPhoneNumber}", ToastLength.Long).Show(); break; case TelephonyManager.ActionPhoneStateChanged: var state = intent.GetStringExtra(TelephonyManager.ExtraState); if (state == TelephonyManager.ExtraStateIdle) Toast.MakeText(context, "Phone Idle (call ended)", ToastLength.Long).Show(); else if (state == TelephonyManager.ExtraStateOffhook) Toast.MakeText(context, "Phone Off Hook", ToastLength.Long).Show(); else if (state == TelephonyManager.ExtraStateRinging) Toast.MakeText(context, "Phone Ringing", ToastLength.Long).Show(); else if (state == TelephonyManager.ExtraIncomingNumber) { var incomingPhoneNumber = intent.GetStringExtra(TelephonyManager.ExtraIncomingNumber); Toast.MakeText(context, $"Incoming Number: {incomingPhoneNumber}", ToastLength.Long).Show(); } break; default: break; } } }
注意:确保为ReadPhoneState
和ProcessOutgoingCalls
添加权限,以使此示例ReadPhoneState
。