Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android文本到语音引发ActivityNotFoundException_Java_Android_Text To Speech - Fatal编程技术网

Java Android文本到语音引发ActivityNotFoundException

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

我将文本到语音应用于我的应用程序(如所示)。它可以在大多数设备上完美地工作。但在一些设备中,如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.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中,这不仅让我感到悲伤,也让其他开发者感到悲伤。