是否可以在 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 在下一行对我大喊大叫,不让我使用“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
}
最佳答案
为了初始化 TTS 引擎,您需要引用一个 Context
。因此它不适用于 this
或 Location.this
,因为它们都引用了 Location
类的运行实例,这显然是 不是 Context
(或其子类)。
也就是说,有多种选择。
- 如果您将
Location
类用作匿名内部类或非静态内部类,例如Activity
(或您可以获取对Context
对象的引用的任何其他类),您可以使用对外部类的引用来初始化 TTS 引擎。 - 与其尝试直接在
Location
类中初始化 TTS 引擎,不如在您确实有Context
引用的地方初始化它;例如您请求LocationManager
的同一位置(您已经需要一个Context
引用)。 - 创建 TTS 引擎的集中实例。您可以将其设置为单例,但也可以将
Application
子类化并将其保留在那里。初始化后,您可以在任何地方或多或少地获取和使用它。
关于android - 如何在 GPS LocationListener 中将 Android 文本转语音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10508945/