在我的Xamarin Studio for MAC中,我使用" Xamarin.Forms"解。我有3个项目。 PCL,iOS和Android。 我是一个代理类(webservice类),我复制了文件" checkServices.cs"进入iOS和Android项目。我还在" iOS"中添加了System.Web.Webservices引用。和" Android"项目
PCL在iOS和Android中引用,但不能引用,反之亦然。分享只是单一的方式。来自PCL - >式IO / Andoroid!
现在如何从我的PCL调用这些方法将数据放在XAML页面上?我喜欢从PCL调用位于iOS / Android项目文件夹中的方法。
答案 0 :(得分:10)
为此,您需要使用Dependency Service。
简而言之,在您的PCL中声明一个定义您想要使用的方法的接口,例如:
public interface ITextToSpeech
{
void Speak (string text);
}
这可以是文本到语音实现的接口。现在,在特定于平台的项目中实现界面。对于iOS,它可能看起来像这样:
using AVFoundation;
public class TextToSpeechImplementation : ITextToSpeech
{
public TextToSpeechImplementation () {}
public void Speak (string text)
{
var speechSynthesizer = new AVSpeechSynthesizer ();
var speechUtterance = new AVSpeechUtterance (text) {
Rate = AVSpeechUtterance.MaximumSpeechRate/4,
Voice = AVSpeechSynthesisVoice.FromLanguage ("en-US"),
Volume = 0.5f,
PitchMultiplier = 1.0f
};
speechSynthesizer.SpeakUtterance (speechUtterance);
}
}
以下是重要部分:在命名空间上方使用此属性标记它。 [assembly: Xamarin.Forms.Dependency (typeof (TextToSpeechImplementation))]
您还需要将适当的使用添加到项目中。
现在,在运行时,根据您运行的平台,将为接口加载正确的实现。所以对于Android你完全一样,只有Speak
方法的实现会有所不同。
在PCL中,您现在可以访问它:DependencyService.Get<ITextToSpeech>().Speak("Hello from Xamarin Forms");
您应该检查DependencyService.Get<ITextToSpeech>()
方法是否为空,这样当您做错事时您的应用就不会崩溃。但这应该涵盖基础知识。