得到错误装载TTS时错误、TTS

2023-09-07 02:59:48 作者:就愛裝逼╮

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

I am getting the following stack trace from some phones running my app.

这正常工作对我的G1和模拟器,我从未有过任何麻烦。但我从其他用户收到下面的堆栈跟踪。

This works fine on my G1 and the emulator, I have never had any troubles. But I am getting the following stack trace from other users.

    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扩展了本次活动。

Here is the activity that handles TTS. GameActivity extends this activity.

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(); 
}

}

推荐答案

请您在特定设备所运行的SDK。 TexttoSpeech API以来,仅从了Android 1.6 SDK中介绍。所以,如果你运行1.5 SDK,你可能会遇到这个问题。

Check the SDK that you are running in that particular device. TexttoSpeech API has been introduced only from Android 1.6 SDK. So if you running 1.5 SDK you might face this issue.

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

这是,你必须得到该错误的地方。它试图导航的用户到Android市场下载的应用程序...检查上述link.They会指定在那里......

This is the place where you must be getting that error. It tries to navigate an user to android market to download the app...Check the above link.They would have specified it there...

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();
}

已经有已经已经申请同一那一个问题。也许你需要改变的条件一点。

There has been already an issue that has been filed on the same. Probably you need to change the conditions a bit.

http://stackoverflow.com/questions/2786399/intentnotfoundexception-for-texttospeech-engine-action-install-tts-data