1

是否可以在 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

}
4

1 回答 1

1

您需要引用 aContext来初始化 TTS 引擎。因此它不能与thisor一起使用Location.this,因为两者都引用您的Location类的正在运行的实例,这显然不是一个Context(或它的子类)。

话虽如此,有多种选择。

  1. 如果您将您的Location类用作匿名内部类或非静态内部类,例如Activity(或任何其他可以获取Context对象引用的类),您可以使用对外部类的引用来初始化 TTS 引擎。
  2. 与其尝试直接在类中初始化 TTS 引擎,不如在您确实有引用的Location地方初始化它;例如,您请求的同一个地方(您已经需要参考)。ContextLocationManagerContext
  3. 创建 TTS 引擎的集中式实例。您可以将其设置为单例,但也可以子类化Application并保留它。初始化后,您可以或多或少地在您喜欢的任何地方获取和使用它。
于 2012-05-09T02:27:17.667 回答