2017-11-26 3 views
1

Ich möchte alle Stimmen, die auf einem Gerät installiert sind, durchlaufen.Iterieren durch ICollection

Im TextSoSpeech Metadaten Ich sehe, dass

namespace Android.Speech.Tts 
{ 
    public class TextToSpeech : Java.Lang.Object 
    { 
     [Obsolete("deprecated")] 
     public virtual ICollection<Voice> Voices { get; } 

Auch gibt es, obwohl es veraltet ist, würde Ich mag "public virtual ICollection Stimmen {get;}" verwenden.

Ich weiß keine andere Möglichkeit, wie Sie die installierten Stimmen mit Xamarin erhalten.

Allerdings habe ich nie eine ICollection durchlaufen.

Wie würde das gemacht werden?

habe ich versucht, beginnend mit

ICollection<Voice>nVoices = Android.Speech.Tts.TextToSpeech. 

Aber ".Voices" ist kein Teil dieser Namespace.

+0

Sie nur 'foreach (var x in der Sammlung verwenden) ' – Jason

Antwort

1

Voices ist keine statische Eigenschaft, weshalb Sie eine Instanz der TextToSpeech-Klasse benötigen, um sie zu iterieren. obwohl zu einem erhalten, müssen Sie die IOnInitListener Schnittstelle implementieren:

public class Speaker : Java.Lang.Object, TextToSpeech.IOnInitListener 
{ 
    private readonly TextToSpeech speaker; 

    public Speaker(Context context) 
    { 
     speaker = new TextToSpeech(context, this); 
     // Don't use speaker.Voices here because it hasn't 
     // been initialized. Wait for OnInit to be called. 
    } 

    public void OnInit(OperationResult status) 
    { 
     if (status.Equals(OperationResult.Success)) 
     { 
      // Iterating the collection with a foreach 
      // is perfectly fine. 
      foreach (var voice in speaker.Voices) 
      { 
       // Do whatever with the voice 
      } 
     } 
    } 
} 

Dann aus Ihrer Tätigkeit, können Sie es gerne verwenden:

var speaker = new Speaker(this);