加载TTS时出错

时间:2010-09-09 06:47:03

标签: android

我从运行我的应用程序的一些手机上获得以下堆栈跟踪。

这在我的G1和模拟器上工作正常,我从来没有遇到任何麻烦。但是我从其他用户那里获得了以下堆栈跟踪。

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.droidprofessor.android.mmm/com.droidprofessor.android.mmm.ActivityGame}: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.speech.tts.engine.CHECK_TTS_DATA }
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
       at android.app.ActivityThread.access$2200(ActivityThread.java:119)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:123)
       at android.app.ActivityThread.main(ActivityThread.java:4363)
       at java.lang.reflect.Method.invokeNative(Native Method)
       at java.lang.reflect.Method.invoke(Method.java:521)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
       at dalvik.system.NativeStart.main(Native Method)
Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.speech.tts.engine.CHECK_TTS_DATA }
       at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1408)
       at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378)
       at android.app.Activity.startActivityForResult(Activity.java:2749)
       at com.droidprofessor.android.mmm.ActivityGame.loadServices(ActivityGame.java:285)
       at com.droidprofessor.android.mmm.ActivityGame.onCreate(ActivityGame.java:105)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
       ... 11 more

这是处理TTS的活动。 GameActivity扩展了这项活动。

public class ActivityTTS extends Activity implements OnInitListener {
//TEXT TO SPEECH SERVICE
public static final int CHECK_TTS_AVAILABILITY = 0;
private static final String TAG = "ActivityTTS";
private TextToSpeech mTts; //Text to speech library


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //TTS Service
    Intent checkIntent = new Intent();
    checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
    startActivityForResult(checkIntent, CHECK_TTS_AVAILABILITY);
}

/**
 * For TTS
 */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    try {
        if(Logging.DEBUG_LOG) Log.d(TAG, "TTS Response: "+requestCode);
        if (requestCode == CHECK_TTS_AVAILABILITY) {
            if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {

                // success, create the TTS instance
                mTts = new TextToSpeech(this, this);            

            } else {
                // missing data, install it
                Toast.makeText(getApplicationContext(), R.string.install_audio_data, Toast.LENGTH_LONG).show();

                Intent installIntent = new Intent();
                installIntent.setAction(
                        TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
                startActivity(installIntent);

                finish();
            }
        }
    }catch (Exception e) {
        if(Logging.ERROR_LOG) Log.e(TAG, "Unable to access service");
        finish();
    }

}




/**
 * Loads when the TTS is ready
 */
@Override
public void onInit(int status) {
    mTts.setLanguage(Locale.getDefault());
}


/**
 * Speak text
 */
final void speak(String text) {
    try{
        mTts.stop(); //Stop speaking
        mTts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
    }
    catch(Exception e) {
        if (Logging.ERROR_LOG) Log.e(TAG, "TTS Failed - cannot say: "+text );
    }

}


@Override
protected void onDestroy() {
    super.onDestroy();

    //Close the Text to Speech Library
    if(mTts != null) mTts.shutdown(); 
}

}

1 个答案:

答案 0 :(得分:1)

检查您在该特定设备上运行的SDK。 TexttoSpeech API仅从Android 1.6 SDK引入。因此,如果您运行1.5 SDK,则可能会遇到此问题。

http://android-developers.blogspot.com/2009/09/introduction-to-text-to-speech-in.html

这是您必须获得该错误的地方。它试图导航用户到Android市场下载应用程序...检查上面的链接。他们会在那里指定它...

else 
{
  // missing data, install it
  Toast.makeText(getApplicationContext(), R.string.install_audio_data, Toast.LENGTH_LONG).show();
  Intent installIntent = new Intent();
  installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
  startActivity(installIntent);
  finish();
}

已经存在同样的问题。可能你需要稍微改变一下条件。

IntentNotFoundException for TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA