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

ContextTTS エンジンを初期化するには、への参照が必要です。したがって、thisorでは機能しません。どちらも、明らかにクラス(またはそのサブクラス) ではないLocation.thisクラスの実行中のインスタンスを参照するためです。LocationContext

そうは言っても、複数のオプションがあります。

  1. Locationクラスを匿名内部クラスまたは非静的内部クラスとして(またはオブジェクトへの参照を取得できるActivityその他のクラス) で使用する場合、外部クラスへの参照を使用して TTS エンジンを初期化できます。Context
  2. クラス内で直接 TTS エンジンを初期化しようとする代わりに、参照があるLocation場所で初期化します。Contextたとえば、リクエストしたのと同じ場所LocationManager(すでに参照が必要な場所Context)。
  3. TTS エンジンの集中インスタンスを作成します。シングルトンとして設定することもできますが、サブクラスApplication化してそこに保持することもできます。初期化された後は、多かれ少なかれ好きな場所で取得して使用できます。
于 2012-05-09T02:27:17.667 に答える