如何在GPS LocationListener中转换Android文本转语音?

时间:2012-05-09 02:02:22

标签: android gps text-to-speech

是否可以在LocatioListener类内部将文本转换为语音功能?

我正在尝试让android应用程序检测你移动了多远。我可以打开GPS,并监控位置移动。我想说“你移动了300米”。将它放在OnLocation方法中是非常方便的,但是当我尝试实例化texttospeech时它会抱怨吗?

这就是我的尝试:

public class Location implements LocationListener {
    static TextToSpeech talk;
public void onLocationChanged(Location location) {
    // TODO Auto-generated method stub

//这会在下一行对我大吼大叫,不会让我用'this'作为上下文? (也试过Location.this)

        talk = new TextToSpeech(this, new extToSpeech.OnInitListener() {
        public void onInit(int status) {
            // TODO Auto-generated method stub

            talk.setLanguage(Locale.UK);
            Location aloc = new Location("aloc");
            Location bloc = new Location("bloc");
            aloc.setLatitude(alat);
            aloc.setLongitude(alon);
            bloc.setLatitude(blat);
            bloc.setLongitude(blon);

            float distance = aloc.distanceTo(bloc);
            talk.speak("You Moved..", TextToSpeech.QUEUE_FLUSH, null);
            }
    });     


}

public void onProviderDisabled(String provider) {
    // TODO Auto-generated method stub

}

public void onProviderEnabled(String provider) {
    // TODO Auto-generated method stub

}

public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub

}

1 个答案:

答案 0 :(得分:1)

您需要引用Context才能初始化TTS引擎。因此,它不适用于thisLocation.this,因为它们都引用了Location类的运行实例,显然 a {{1} (或其子类)。

话虽如此,有多种选择。

  1. 如果您将Context类用作匿名内部类或非静态内部类,例如Location(或可以获取对Activity对象的引用的任何其他类),您可以使用对外部类的引用来初始化TTS引擎。 / LI>
  2. 不是试图直接在Context类内部初始化TTS引擎,而是在具有Location引用的地方初始化它;例如您请求Context的地方(您已经需要LocationManager参考)。
  3. 创建TTS引擎的集中实例。您可以将其设置为单例,但也可以将Context子类化并保留在那里。初始化之后,您可以在任何您喜欢的地方或多或少地使用它。