【问题标题】:Make a USSD call in Xamarin Crossplatform app在 Xamarin 跨平台应用程序中进行 USSD 调用
【发布时间】:2018-12-04 10:53:24
【问题描述】:

我想使用 C# 在 xamarin 跨平台应用程序中进行 USSD 调用,但我不知道从哪里开始。我见过的所有例子都是用java完成的。是否可以在不打开拨号器的情况下在我的应用程序中成功拨打 *270# 之类的 USSD 代码?如果是,请问如何?如果有任何帮助,我将不胜感激

【问题讨论】:

    标签: c# xamarin xamarin.android cross-platform ussd


    【解决方案1】:

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

    在您的共享项目中创建一个接口:

    public interface IUssdRenderer
    {
        void StartTransaction();
    }
    

    然后在你的android项目中:

    使用系统; 使用Android.Content; 使用Android.OS; 使用 ussd.Renderers;

    [程序集:Xamarin.Forms.Dependency(typeof(IUssdRenderer))] 命名空间 ussd.Droid.Renderers { 公共类 UssdRenderer : IUssdRenderer { 公共 Android.Net.Uri createUriFromString(string 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);
        }
    }
    }
    

    你还得注册你的接口,我用的是棱镜:

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

    最后一点是确保您已启用呼叫权限:

    右键单击Android项目>选项> Android应用程序

    make sure CallPhone is selected
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        从左右收集后,我终于用 CrossMessaging 插件找到了我的问题的解决方案。

        步骤如下:

        1. 创建您的项目并命名
        2. 在您的项目中从 nuget Xam.Plugins.Messaging 安装
        3. 在 Android 项目 MainActivity 的 OnCreate 方法中添加以下行: CrossMessaging.Current.Settings().Phone.AutoDial = true;
        4. android.permission.CALL_PHONE 添加到清单文件中。
        5. 如下拨打电话
            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");
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-06-20
          • 2014-11-03
          • 1970-01-01
          • 2016-09-19
          • 1970-01-01
          • 2018-02-20
          • 1970-01-01
          相关资源
          最近更新 更多