これには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>()
メソッドがnullでない場合、あなたはおそらく、チェックする必要があります。しかし、これは基本をカバーする必要があります。
https://developer.xamarin.com/guides/xamarin-forms/dependency-service/text-to-speech/ –