我想迭代设备上安装的所有声音。
在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”不是该命名空间的一部分。
答案 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);