首页 > 解决方案 > 如何使用 Xamairn 表单拨打电话?

问题描述

我是 xamarin 的新手,我想直接打电话(不打开拨号器)。我试过这个例子,但它不起作用。 点击请帮助

public class PhoneCall_Droid : IPhoneCall
{
    public void MakeQuickCall(string PhoneNumber)
    {
        try
        {
            var uri = Android.Net.Uri.Parse(string.Format("tel:{0}", PhoneNumber));
            var intent = new Intent(Intent.ActionCall, uri);
            Xamarin.Forms.Forms.Context.StartActivity(intent);
        }
        catch (Exception ex)
        {
            new AlertDialog.Builder(Android.App.Application.Context).SetPositiveButton("OK", (sender, args) =>
            {
                //User pressed OK
            })
            .SetMessage(ex.ToString())
            .SetTitle("Android Exception")
            .Show();
        }
    }        
}

标签: xamarin.forms

解决方案


上面的代码中有两个错误:

1.Xamarin.Forms.Forms.Context无法获得正确的上下文。

您可以在 MainActiviy 中定义一个静态变量,例如:

public static MainActivity Instance;
protected override void OnCreate(Bundle savedInstanceState)
   {
      TabLayoutResource = Resource.Layout.Tabbar;
      ToolbarResource = Resource.Layout.Toolbar;

      base.OnCreate(savedInstanceState);
      global::Xamarin.Forms.Forms.Init(this, savedInstanceState);

      Instance = this;

      LoadApplication(new App());

    }

您也可以使用当前活动插件,您可以参考当前活动

2.Android6.0以后需要申请运行时权限官方文件

这是一个简单的例子:

[assembly: Xamarin.Forms.Dependency(typeof(PhoneCall_Droid))]
namespace App18.Droid
{
  class PhoneCall_Droid: IPhoneCall
   {
     public void MakeQuickCall(string PhoneNumber)
      {
        try
        {
            if(ActivityCompat.CheckSelfPermission(MainActivity.Instance, Android.Manifest.Permission.CallPhone) != Android.Content.PM.Permission.Granted ){

               ActivityCompat.RequestPermissions(MainActivity.Instance, new string[] {Android.Manifest.Permission.CallPhone }, 1);
                return;
            }
            else
            {
            var uri = Android.Net.Uri.Parse(string.Format("tel:{0}", PhoneNumber));
            var intent = new Intent(Intent.ActionCall, uri);
            MainActivity.Instance.StartActivity(intent);
            }
        }
        catch (Exception ex)
        {
            new AlertDialog.Builder(MainActivity.Instance).SetPositiveButton("OK", (sender, args) =>
            {
                //User pressed OK
            })
            .SetMessage(ex.ToString())
            .SetTitle("Android Exception")
            .Show();
        }
    }     
  }
}

您还可以使用 nugetpackage Plugin.Permissions来请求运行时权限(Permission.Location),请参阅Plugin.Permissions

最后你可以打电话给

DependencyService.Get<IPhoneCall>().MakeQuickCall(phonenumber);

推荐阅读