遍历 ICollection

Iterate through 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”不是该命名空间的一部分。

Voices 不是静态的 属性 这就是为什么你需要 TextToSpeech class 的实例来迭代它。不过,要获得一个,您需要实现 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
            }
        }
    }
}

然后从你的activity,你可以像这样使用它:

var speaker = new Speaker(this);