我正在开发一个针对Android的自定义文本到语音引擎(仅适用于一种语言)。在大多数手机上一切正常,但我在安装Kit Kat的nexus 4上遇到了问题。我的引擎已成功安装,并且在可用引擎下可见。我可以选择它作为我的首选引擎。点击我的引擎的语言选项后,会出现一个只有一种语言的警告对话框(这是正常的)。但在我点击它之后,设置应用程序崩溃了。每当我尝试打开设置/语言和输入/文本到语音输出时,也会发生这种情况。我可以在默认语言选项检查... 已写入。当我检查堆栈跟踪时,我可以看到 MissingResourceExceptions:在函数 com.android.setting.tts.TextToSpeechSettings中抛出了语言环境的3个字母的语言代码。 CheckDefaultLocale()
我发现我的语言ISO3代码确实犯了错误,我修复了它。当我将此版本安装到没有安装我的应用程序的先前版本的Nexus 4手机时,崩溃不再发生。但是当它安装在具有以前版本的手机上时,问题就存在了(尽管旧版本已经卸载)。我可以看到“设置”应用仍在使用旧的(错误的)ISO3代码。如果成功卸载第一个版本怎么可能?
我必须说我可以使用我的引擎使用对讲选项。但是由于碰撞,一旦选择了引擎,就不可能改变首选引擎
这是我的stacktrace
03-10 11:11:35.934: E/AndroidRuntime(10608): FATAL EXCEPTION: main
03-10 11:11:35.934: E/AndroidRuntime(10608): Process: com.android.settings, PID: 10608
03-10 11:11:35.934: E/AndroidRuntime(10608): java.util.MissingResourceException: No 3-letter language code for locale: hebrew
03-10 11:11:35.934: E/AndroidRuntime(10608): at java.util.Locale.getISO3Language(Locale.java:540)
03-10 11:11:35.934: E/AndroidRuntime(10608): at com.android.settings.tts.TextToSpeechSettings.evaluateDefaultLocale(TextToSpeechSettings.java:284)
03-10 11:11:35.934: E/AndroidRuntime(10608): at com.android.settings.tts.TextToSpeechSettings.checkDefaultLocale(TextToSpeechSettings.java:270)
03-10 11:11:35.934: E/AndroidRuntime(10608): at com.android.settings.tts.TextToSpeechSettings.onInitEngine(TextToSpeechSettings.java:251)
03-10 11:11:35.934: E/AndroidRuntime(10608): at com.android.settings.tts.TextToSpeechSettings$1.onInit(TextToSpeechSettings.java:128)
03-10 11:11:35.934: E/AndroidRuntime(10608): at android.speech.tts.TextToSpeech.dispatchOnInit(TextToSpeech.java:701)
03-10 11:11:35.934: E/AndroidRuntime(10608): at android.speech.tts.TextToSpeech.access$1400(TextToSpeech.java:58)
03-10 11:11:35.934: E/AndroidRuntime(10608): at android.speech.tts.TextToSpeech$Connection$SetupConnectionAsyncTask.onPostExecute(TextToSpeech.java:1509)
03-10 11:11:35.934: E/AndroidRuntime(10608): at android.speech.tts.TextToSpeech$Connection$SetupConnectionAsyncTask.onPostExecute(TextToSpeech.java:1471)
03-10 11:11:35.934: E/AndroidRuntime(10608): at android.os.AsyncTask.finish(AsyncTask.java:632)
03-10 11:11:35.934: E/AndroidRuntime(10608): at android.os.AsyncTask.access$600(AsyncTask.java:177)
03-10 11:11:35.934: E/AndroidRuntime(10608): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
03-10 11:11:35.934: E/AndroidRuntime(10608): at android.os.Handler.dispatchMessage(Handler.java:102)
03-10 11:11:35.934: E/AndroidRuntime(10608): at android.os.Looper.loop(Looper.java:136)
03-10 11:11:35.934: E/AndroidRuntime(10608): at android.app.ActivityThread.main(ActivityThread.java:5017)
03-10 11:11:35.934: E/AndroidRuntime(10608): at java.lang.reflect.Method.invokeNative(Native Method)
03-10 11:11:35.934: E/AndroidRuntime(10608): at java.lang.reflect.Method.invoke(Method.java:515)
03-10 11:11:35.934: E/AndroidRuntime(10608): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
03-10 11:11:35.934: E/AndroidRuntime(10608): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
03-10 11:11:35.934: E/AndroidRuntime(10608): at dalvik.system.NativeStart.main(Native Method)
03-10 11:11:35.944: W/ActivityManager(598): Force finishing activity com.android.settings/.SubSettings
03-10 11:11:35.944: W/ActivityManager(598): Force finishing activity com.android.settings/.SubSettings
03-10 11:11:36.445: W/ActivityManager(598): Activity pause timeout for ActivityRecord{432ad308 u0 com.android.settings/.SubSettings t218 f}
答案 0 :(得分:2)
这是一个Android错误,非常令人沮丧。
有一个错误报告here(已从this开始修复,但尚未推广到实际设备)和相关的here。
如果您声明的区域设置无法与系统匹配,则“设置”将持续崩溃。我尝试清除所有内容以防止这种情况发生,但系统正在某处缓存此值并尝试在检查应用中的任何更新区域设置之前匹配它。
我将代码更改为locale that I knew would be matched,擦除了我的设备并重新安装了...
您需要确保声明locale correctly as heb-HEB我认为!!!但要小心!!!如果Android无法识别它,您将再次崩溃....
最好声明一个默认的额外语言环境,然后检查设置是否正确显示您正在使用的语言环境代码。如果不是,不要选择它!再试一次....
我发布了上面的错误报告,询问Android在哪里持有这个错误的语言环境,但我没有回答....如果你能找到答案,你就不需要擦除你的设备了。我尝试在恢复中擦除所有缓存,但它没有用。