在 Xamarin 跨平台应用程序中进行 USSD 调用
Make a USSD call in Xamarin Crossplatform app
我想使用 C# 在 xamarin 跨平台应用程序中进行 USSD 调用,但我不知道从哪里开始。我看到的所有示例都是在 java 中完成的。是否可以在不打开拨号器的情况下在我的应用程序中成功拨打 *270# 之类的 USSD 代码?如果是,请问如何?我将非常感谢任何帮助
要使用 Xamarin 表单,您必须为 android 创建一个自定义渲染器:
在您的共享项目中创建一个界面:
public interface IUssdRenderer
{
void StartTransaction();
}
然后在您的 android 项目中:
使用系统;
使用 Android.Content;
使用 Android.OS;
使用 ussd.Renderers;
[程序集:Xamarin.Forms.Dependency(typeof(IUssdRenderer))]
命名空间 ussd.Droid.Renderers
{
public class UssdRenderer : IUssdRenderer
{
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>();
}
最后一点是确保您启用了通话权限:
右键单击 Android 项目 > 选项 > Android 应用程序
make sure CallPhone is selected
您可以使用 Xamarin.Essentials PhoneDialer 来拨打电话,请注意,由于 USSD 包含“#”,您需要对其进行 URL 编码。示例:
string code = "*123#";
PhoneDialer.Open(HttpUtility.UrlEncode(code));
经过左右搜罗,终于用CrossMessaging插件找到了解决我问题的方法。
步骤如下:
- 创建项目并命名
- 从项目中的 nuget
Xam.Plugins.Messaging
安装
- 在 Android 项目 MainActivity 的 OnCreate 方法中添加以下行:
CrossMessaging.Current.Settings().Phone.AutoDial = true;
- 将
android.permission.CALL_PHONE
添加到清单文件。
- 调用如下
try
{
var phonedialer = CrossMessaging.Current.PhoneDialer;
if (phonedialer.CanMakePhoneCall)
{
//Ussd call's
phonedialer.MakePhoneCall(HttpUtility.UrlEncode("#150#"));
//For normal calls
phonedialer.MakePhoneCall("9111111111")
}
}
catch (Exception exc)
{
await DisplayAlert("Error!!!!", exc.ToString(), "ok");
}
我想使用 C# 在 xamarin 跨平台应用程序中进行 USSD 调用,但我不知道从哪里开始。我看到的所有示例都是在 java 中完成的。是否可以在不打开拨号器的情况下在我的应用程序中成功拨打 *270# 之类的 USSD 代码?如果是,请问如何?我将非常感谢任何帮助
要使用 Xamarin 表单,您必须为 android 创建一个自定义渲染器:
在您的共享项目中创建一个界面:
public interface IUssdRenderer
{
void StartTransaction();
}
然后在您的 android 项目中:
使用系统; 使用 Android.Content; 使用 Android.OS; 使用 ussd.Renderers;
[程序集:Xamarin.Forms.Dependency(typeof(IUssdRenderer))] 命名空间 ussd.Droid.Renderers { public class UssdRenderer : IUssdRenderer { 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>();
}
最后一点是确保您启用了通话权限:
右键单击 Android 项目 > 选项 > Android 应用程序
make sure CallPhone is selected
您可以使用 Xamarin.Essentials PhoneDialer 来拨打电话,请注意,由于 USSD 包含“#”,您需要对其进行 URL 编码。示例:
string code = "*123#";
PhoneDialer.Open(HttpUtility.UrlEncode(code));
经过左右搜罗,终于用CrossMessaging插件找到了解决我问题的方法。
步骤如下:
- 创建项目并命名
- 从项目中的 nuget
Xam.Plugins.Messaging
安装 - 在 Android 项目 MainActivity 的 OnCreate 方法中添加以下行:
CrossMessaging.Current.Settings().Phone.AutoDial = true;
- 将
android.permission.CALL_PHONE
添加到清单文件。 - 调用如下
try
{
var phonedialer = CrossMessaging.Current.PhoneDialer;
if (phonedialer.CanMakePhoneCall)
{
//Ussd call's
phonedialer.MakePhoneCall(HttpUtility.UrlEncode("#150#"));
//For normal calls
phonedialer.MakePhoneCall("9111111111")
}
}
catch (Exception exc)
{
await DisplayAlert("Error!!!!", exc.ToString(), "ok");
}