如何通过点击标签在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包 应用程序项目以引用特定于平台的 实施
我错过了哪一部分?请帮我。先谢谢你。
答案 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
方法的IAndroidMethods
和startPhoneCall()
接口。
我将展示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);
}
}
}
}