I am getting the following stack trace from some phones running my app.
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
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();
}
}
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…