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