来自服务的文本到语音

时间:2012-08-24 14:20:48

标签: android

我在设备启动时运行了一项服务。它会检查一些数据并发送通知。 我遇到了以下情况。

http://mobile.tutsplus.com/tutorials/android/android-sdk-using-the-text-to-speech-engine/

我想发送语音通知。我不需要UI部分。如何在项目中添加它?

  1. 不同的java类(从服务调用Activity)
  2. 内部课程

2 个答案:

答案 0 :(得分:0)

在其中创建课程AppTextToSpeech的实例:

public class App extends Application {
    private static TextToSpeech mTts;

    public static TextToSpeech getmTts() {
        return mTts;
    }

    public void onCreate() {
        super.onCreate();

        // creating TTS:
        mTts = new TextToSpeech(this, this);
        mTts.setLanguage(Locale.US);
        mTts.stop();
    }
}      

在清单中声明App(上方):

<application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:name="your.application.package.App" >

当您想要broadcast时,请通过您的服务发送BroadcastReceiver,例如:

public class TTSReceiver extends BroadcastReceiver implements OnInitListener {

    private TextToSpeech mTts;
    private String message;

    @Override
    public void onReceive(Context context, Intent intent) {
        mTts = App.getmTts();
        mTts.setLanguage(Locale.US);
        message = "your message";
        mTts.stop();
        mTts.speak(message, TextToSpeech.QUEUE_FLUSH, null);
    }

    public void onInit(int status) {
    }

}

答案 1 :(得分:0)

public class SpeakService extends Service implements OnInitListener {

     public static TextToSpeech tts;
     private String string;

     @Override
     public IBinder onBind(Intent arg0) {
         return null;
     }

     @Override
     public void onCreate() {
         tts = new TextToSpeech(this, this);
         super.onCreate();
     }

     @Override
     public void onDestroy() {
         if (tts != null) {
             tts.stop();
             tts.shutdown();
         }
         super.onDestroy();
     }

     @Override
     public void onStart(Intent intent, int startId) {
       super.onStart(intent, startId);
       string = intent.getStringExtra("string");
     }

     @Override
     public void onInit(int status) {
       if (status == TextToSpeech.SUCCESS) {
         int result = tts.setLanguage(Locale.UK);
         if (result == TextToSpeech.LANG_MISSING_DATA
                || result == TextToSpeech.LANG_NOT_SUPPORTED) {
            Log.d("SpeakService", "Language is not available.");
         } else {
            if (!TextUtils.isEmpty(string)) {
                speak(string);
            } else {

                speak("Error");
            }
         }
       } else {
        Log.d("SpeakService", "Could not initialize TextToSpeech.");
     }
     }

     private void speak(String string) {
        tts.speak(string, TextToSpeech.QUEUE_FLUSH, null);
     }