C# 在Xamarin跨平台应用程序中拨打USSD电话

C# 在Xamarin跨平台应用程序中拨打USSD电话,c#,xamarin,xamarin.android,cross-platform,ussd,C#,Xamarin,Xamarin.android,Cross Platform,Ussd,我想用C#在xamarin跨平台应用程序中打一个USSD电话,我不知道从哪里开始。我看到的所有示例都是用java编写的。在我的应用程序中,是否可以在不打开拨号器的情况下成功拨打USSD代码,如*270#?如果是,请怎么做?我将非常感谢任何帮助要使用Xamarin表单,您必须为android创建自定义渲染器: 在共享项目中创建接口: public interface IUssdRenderer { void StartTransaction(); } 然后在您的android项目中: 使

我想用C#在xamarin跨平台应用程序中打一个USSD电话,我不知道从哪里开始。我看到的所有示例都是用java编写的。在我的应用程序中,是否可以在不打开拨号器的情况下成功拨打USSD代码,如*270#?如果是,请怎么做?我将非常感谢任何帮助

要使用Xamarin表单,您必须为android创建自定义渲染器:

在共享项目中创建接口:

public interface IUssdRenderer
{
    void StartTransaction();
}
然后在您的android项目中:

使用制度; 使用Android.Content; 使用Android.OS; 使用ussd渲染器

[程序集:Xamarin.Forms.Dependency(typeof(iussdrender))] 命名空间ussd.Droid.Renderers { 公共类苏联人:IUSSDRENDER { public Android.Net.Uri createUriFromString(字符串ussd) {

        String uri = "tel:";
        foreach (char c in ussd.ToCharArray())
        {
            if (c == '#')
            {
                uri += Android.Net.Uri.Encode("#");
            }
            else
            {
                uri += c;
            }
        }
        return Android.Net.Uri.Parse(uri);
    }

    public void StartTransaction()
    {
        var intent = new Intent(Intent.ActionCall, createUriFromString("*270#"));
        Context ctx = Xamarin.Forms.Forms.Context;
        ctx.StartActivity(intent);
    }
}
}
您还必须注册您的接口,我使用的是prism:

    public void RegisterTypes(IContainerRegistry containerRegistry)
    {
        containerRegistry.Register< IUssdRenderer, UssdRenderer>(); 
    }

您可以使用Xamarin.Essentials PhoneDialer拨打电话,请注意,由于USSD包含“#”,您需要对其进行URL编码。例如:

string code = "*123#";
PhoneDialer.Open(HttpUtility.UrlEncode(code));
string code = "*123#";
PhoneDialer.Open(HttpUtility.UrlEncode(code));