【发布时间】:2017-05-29 06:53:29
【问题描述】:
你能帮我了解如何检测拨出电话是否被接听(我需要记录从接听到挂断的通话)?我可以检测到来电,但不能检测到呼出。所以请帮忙。
【问题讨论】:
标签: c# android xamarin xamarin.android
你能帮我了解如何检测拨出电话是否被接听(我需要记录从接听到挂断的通话)?我可以检测到来电,但不能检测到呼出。所以请帮忙。
【问题讨论】:
标签: c# android xamarin xamarin.android
使用TelephonyManager.ActionPhoneStateChanged 监控TelephonyManager 状态,在收到TelephonyManager.ExtraStateIdle 后,您就知道手机无线电何时空闲(没有通话过程中)。
[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 添加权限,以使此示例正常工作。
【讨论】:
PreciseCallState 上的反射,仅可访问已接听电话的服务应用程序/root 手机