如何通过点击标签打电话?

时间:2017-10-01 03:37:55

标签: c# xaml xamarin.forms

如何通过点击标签在Xamarin Forms中拨打电话?我知道这个问题是陈词滥调,因为有人已经在这里问了这个问题,

How to make a phone call in Xamarin.Forms by clicking on a label?

我不能在那篇文章中提问,因为它需要50点评论。但我仍然需要知道答案,因为该帖子没有显示最终的代码。所以这是我的代码,

RequestorPage.xaml

<StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand" Margin="10,0,10,0">
      <StackLayout Orientation="Vertical" HorizontalOptions="Start">
          <Image Source="detail_mobile" HeightRequest="20" WidthRequest="20" />
      </StackLayout>
      <StackLayout Orientation="Vertical" VerticalOptions="Center">
          <Label FontSize="Small" Text="{Binding RequestorHp}" x:Name="reqHp" />
      </StackLayout>
</StackLayout>

RequestorPage.xaml.cs

public RequestorPage()
        {
            InitializeComponent();

            var tapGestureRecognizer = new TapGestureRecognizer();
            tapGestureRecognizer.Tapped += (s, e) =>
            {
                // handle the tap
                var phoneDialer = CrossMessaging.Current.PhoneDialer;
                if (phoneDialer.CanMakePhoneCall)
                {
                    phoneDialer.MakePhoneCall(reqHp.Text);
                }
            };

            // attache the gesture to your label
            reqHp.GestureRecognizers.Add(tapGestureRecognizer);
        }

当我在模拟器中运行时,单击RequestorHp标签时出现错误。这是错误,

  

已抛出System.NotImplementedException

     

此功能未在便携版本中实现   部件。您应该从主要参考NuGet包   应用程序项目以引用特定于平台的   实施

我错过了哪一部分?请帮我。先谢谢你。

1 个答案:

答案 0 :(得分:0)

您需要使用dependency service在共享项目的iOS和Android项目中运行MakePhoneCall()方法。

在您的Xamarin.Forms项目中,您可以添加以下代码来调用依赖服务:

switch (Device.RuntimePlatform)
{
    case Device.Android:
        DependencyService.Get<IAndroidMethods>().startPhoneCall();
        break;
    case Device.iOS:
        DependencyService.Get<IAppleMethods>().startPhoneCall();
        break;
}

接下来,在您的Xamarin.Forms项目中,创建两个包含IAppleMethods方法的IAndroidMethodsstartPhoneCall()接口。

我将展示IAndroidMethods的实施方式:

public interface IAndroidMethods
{
    void startPhoneCall(string number);
}

然后,在iOS和Android项目中,创建实现刚刚创建的接口的类。这将是你的android类:

//add appropriate using declarations
[assembly: Xamarin.Forms.Dependency(typeof(AndroidMethods))]
namespace <YourApp>.Droid
{
    public class AndroidMethods : IAndroidMethods
    {
        public void startPhoneCall(string number)
        {
            var phoneDialer = CrossMessaging.Current.PhoneDialer;
            if (phoneDialer.CanMakePhoneCall)
            {
                phoneDialer.MakePhoneCall(number);
            }
        }
    }
}