首页 > 解决方案 > 无法使用 Xamarin 在 Android 中阻止拨出电话

问题描述

我正在尝试构建一个应用程序,根据被叫号码终止拨出电话。我有适用于来电的代码,但不适用于拨出:

        if (Build.VERSION.SdkInt < Android.OS.BuildVersionCodes.P)
        {
            TelephonyManager mng = (TelephonyManager)(context.GetSystemService(Context.TelephonyService));
            IntPtr iTelephonyPtr = JNIEnv.GetMethodID(mng.Class.Handle, "getITelephony", "()Lcom/android/internal/telephony/ITelephony;");

            IntPtr telephony = JNIEnv.CallObjectMethod(mng.Handle, iTelephonyPtr);
            IntPtr iTelephonyClass = JNIEnv.GetObjectClass(telephony);
            IntPtr iTelephonyEndCall = JNIEnv.GetMethodID(iTelephonyClass, "endCall", "()Z");
            JNIEnv.CallBooleanMethod(telephony, iTelephonyEndCall);
            JNIEnv.DeleteLocalRef(telephony);
            JNIEnv.DeleteLocalRef(iTelephonyClass);
        }
        else
        {
            TelecomManager telecomManager = (TelecomManager)context.GetSystemService(Context.TelecomService); 
            telecomManager.EndCall();
        }

我在互联网上一无所获。

标签: c#androidxamarin

解决方案


您需要android.intent.action.NEW_OUTGOING_CALL在应用程序清单中为意图注册 Activity,然后在拨出呼叫时处理该意图。

我不知道你是否可以在 c# 中完成这一切。如果您可以接收到意图,您应该能够获得用于拨打电话的意图,然后确定如何停止正在进行的通话。

这里有一个java only question and answer ,但它已经很老了,我不知道它是否仍然适用于现代android版本。(P 及以上)

那里的答案建议调用setResultData(null);处理程序,将数字替换为 null,从而取消调用。我不知道这是否可以从 xamarin 内部实现。


推荐阅读