遍历 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);
我想遍历设备上安装的所有语音。
在 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);