通过ICollection迭代

时间:2017-11-26 17:54:56

标签: c# android xamarin icollection

我想迭代设备上安装的所有声音。

在TextSoSpeech元数据中,我看到有

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

即使它已经过时,我也想使用“public virtual ICollection Voices {get;}”。

我不知道如何使用Xamarin获取已安装的声音。

但是,我从未迭代过ICollection。

怎么做?

我尝试从

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

但“.Voices”不是该命名空间的一部分。

1 个答案:

答案 0 :(得分:1)

Voices不是静态属性,这就是为什么需要TextToSpeech类的实例来迭代它的原因。但要获得一个,您需要实现IOnInitListener接口:

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
            }
        }
    }
}

然后从您的活动中,您可以像以下一样使用它:

var speaker = new Speaker(this);