是否可以在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
}
答案 0 :(得分:1)
您需要引用Context
才能初始化TTS引擎。因此,它不适用于this
或Location.this
,因为它们都引用了Location
类的运行实例,显然不 a {{1} (或其子类)。
话虽如此,有多种选择。
Context
类用作匿名内部类或非静态内部类,例如Location
(或可以获取对Activity
对象的引用的任何其他类),您可以使用对外部类的引用来初始化TTS引擎。 / LI>
Context
类内部初始化TTS引擎,而是在做具有Location
引用的地方初始化它;例如您请求Context
的地方(您已经需要LocationManager
参考)。Context
子类化并保留在那里。初始化之后,您可以在任何您喜欢的地方或多或少地使用它。