Java Android文本到语音引发ActivityNotFoundException
我将文本到语音应用于我的应用程序(如所示)。它可以在大多数设备上完美地工作。但在一些设备中,如LG Optimus G、GK、L3 II和Sky IM-A800S,应用程序活动意外停止,出现以下错误:Java Android文本到语音引发ActivityNotFoundException,java,android,text-to-speech,Java,Android,Text To Speech,我将文本到语音应用于我的应用程序(如所示)。它可以在大多数设备上完美地工作。但在一些设备中,如LG Optimus G、GK、L3 II和Sky IM-A800S,应用程序活动意外停止,出现以下错误: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.appname/com.myapp.appname.ContentView}: android.content.ActivityNotFound
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.appname/com.myapp.appname.ContentView}: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.speech.tts.engine.CHECK_TTS_DATA }
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2067)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2092)
at android.app.ActivityThread.access$600(ActivityThread.java:138)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1203)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4827)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
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:1568)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1439)
at android.app.Activity.startActivityForResult(Activity.java:3351)
at android.app.Activity.startActivityForResult(Activity.java:3312)
at android.support.v4.app.FragmentActivity.startActivityForResult(Unknown Source)
at viettien.kadict.ContentView.onCreate(Unknown Source)
at android.app.Activity.performCreate(Activity.java:5008)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1084)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2031)
... 11 more
以下是我的简短代码:
private static final int MY_DATA_CHECK_CODE = 4;
private TextToSpeech tts;
onCreate()
//Fire off an intent to check if a TTS engine is installed
Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);
OnButtonClick
SpeakText("Here is the word spoken");
onDestroy()
tts.stop();
tts.shutdown();
onActivityResult
case MY_DATA_CHECK_CODE:
if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS)
{
// success, create the TTS instance
tts = new TextToSpeech(this, this);
}
else
{
// missing data, install it
Intent installIntent = new Intent();
installIntent.setAction(
TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
startActivity(installIntent);
}
break;
onInit
if (status == TextToSpeech.SUCCESS) {
int result = tts.setLanguage(Locale.US);
if (result == TextToSpeech.LANG_MISSING_DATA
|| result == TextToSpeech.LANG_NOT_SUPPORTED) {
Log.e("TTS", "This Language is not supported");
} else {
}
} else {
Log.e("TTS", "Initilization Failed!");
}
SpeakText
tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
这是与ROM相关的问题还是我的代码有问题
非常感谢您的帮助。检查您在该特定设备上运行的SDK。TexttoSpeech API仅从Android 1.6 SDK引入。因此,如果您运行1.5SDK,您可能会面临这个问题 已经有一个问题已经在同一天提交。也许你需要稍微改变一下条件 检查您的意图是否得到实际支持
PackageManager pm = getPackageManager();
Intent installIntent = new Intent();
installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
ResolveInfo resolveInfo = pm.resolveActivity( installIntent, PackageManager.MATCH_DEFAULT_ONLY );
if( resolveInfo == null ) {
// Not able to find the activity which should be started for this intent
} else {
startActivity( installIntent );
}
错误表明名为android.speech.tts.engine.CHECK\u tts\u DATA的
活动
未作为ROM的一部分导出(注意:LG ROM已知有问题)。要防止此错误,请执行以下操作:
try {
Intent intent = new Intent(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
} catch (ActivityNotFoundException e) {
Log.e("Oops! The function is not available in your device." + e.fillInStackTrace());
}
您可以使用的另一种方法是首先检查包是否可调用,如:
public static boolean isActivityCallable(Context context, String packageName, String className) {
final Intent intent = new Intent();
intent.setClassName(packageName, className);
List<ResolveInfo> list = getPackageManager(context).queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
公共静态布尔值isActivityCallable(上下文上下文、字符串packageName、字符串类名){
最终意图=新意图();
intent.setClassName(packageName,className);
List List=getPackageManager(上下文).QueryInputActivities(仅适用于意图、PackageManager.MATCH_默认值);
返回列表.size()>0;
}
其中
packageName
是TextToSpeech.Engine
,className
是TextToSpeech.Engine.ACTION\u CHECK\u TTS\u DATA
非常感谢您。你的解决方案看起来很有希望。我应用了第一种方法,但是运行Android 4.4的LG Optimus G(geehrc)
用户仍然报告相同的问题:Android.content.ActivityNotFoundException:没有找到处理意图的活动{act=Android.speech.tts.engine.INSTALL_tts_DATA}
。真烦人@NiamhDoyle:使用第二种解决方案,如果活动不可调用,您只需向LG用户显示一条消息,说明他们无法使用此特定TTS功能。通过这种方式,LG设备所有者可以向LG投诉,以便他们可以进行更改。正如我之前所说的,LG还没有将其他活动输出到他们的ROM中,这不仅让我感到悲伤,也让其他开发者感到悲伤。