2017-01-27 5 views
2

私のXamarin Studio for Macでは "Xamarin.Forms"ソリューションを使用しています。私は3つのプロジェクトを持っています。 PCL、iOS、アンドロイド。 私はファイル "checkServices.cs"をiOSとAndroidプロジェクトにコピーしたプロキシクラス(webserviceクラス)を持っています。私はまた、 "iOS"と "Android"プロジェクトにSystem.Web.Webservicesリファレンスを追加しました。iOS/Androidプロジェクトのメソッドにアクセスする方法PCLプロジェクトのコード

PCLはiOSとAndroidで参照されますが、その逆もありません。共有は単なる方法です。 PCL - > iOS/Andoroidから!

ここで、これらのメソッドを自分のPCLから呼び出して、データをXAMLページに配置するにはどうすればよいですか?私は、iOS/AndroidプロジェクトフォルダにあるPCLからメソッドを呼び出すのが好きです。

+1

https://developer.xamarin.com/guides/xamarin-forms/dependency-service/text-to-speech/ –

答えて

9

これには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でない場合、あなたはおそらく、チェックする必要があります。しかし、これは基本をカバーする必要があります。

+0

あなたは最高と最高の最高です。私は約2週間、私の問題を策定し、解決策を見つけるのに苦労しています....もう一度ありがとうございます....あなたは命の恩人です:) – ethem

+0

これはうまくいく.. ..! – GvSharma

+0

ドロイドでPCLメソッドを呼び出すのはどうですか? –

関連する問題