如何使用Xamairn表格拨打电话?

时间:2019-07-04 21:14:54

标签: xamarin.forms

我是xamarin的新手,我想直接打个电话(不打开拨号程序)。我尝试了这个示例,但它不起作用。 Click请帮助

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();
        }
    }        
}

1 个答案:

答案 0 :(得分:0)

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

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());

    }

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

2。在Android6.0之后,您应该请求runtime permissionsofficial doucument

这是一个简单的示例:

[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);