【问题标题】:How to get event when i am answering outgoing call接听电话时如何获取事件
【发布时间】:2017-05-29 06:53:29
【问题描述】:

你能帮我了解如何检测拨出电话是否被接听(我需要记录从接听到挂断的通话)?我可以检测到来电,但不能检测到呼出。所以请帮忙。

【问题讨论】:

    标签: c# android xamarin xamarin.android


    【解决方案1】:

    使用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;
            }
        }
    }
    

    注意:确保为 ReadPhoneStateProcessOutgoingCalls 添加权限,以使此示例正常工作。

    【讨论】:

    • 谢谢。但我想检测拨出电话是否被接听。在我参加电话会议后,这些事件不会触发。
    • @PrabhuPrakash 您可以跟踪从出站呼叫状态开始到呼叫结束点(空闲)。通过在 API 21+ 中添加的 PreciseCallState 上的反射,可访问已接听电话的服务应用程序/root 手机
    • 哦,好吧..谢谢..还有其他选择吗?
    • @PrabhuPrakash 据我所知没有其他方法,您可以搜索 StackOverflow、Google 等...但我知道是否可以在 PreciseCallState 内获得此信息的唯一广播:stackoverflow.com/a/29490832/4984832跨度>
    • 对我来说,在“case Intent.ActionNewOutgoingCall:”行中没有触发拨出电话
    猜你喜欢
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    • 2022-09-29
    相关资源
    最近更新 更多