TextToSpeech.setEngineByPackageName()引发NullPointerException异常 [英] TextToSpeech.setEngineByPackageName() triggers NullPointerException
问题描述
我的活动的的OnInit()
包含通话TextToSpeech.setEngineByPackageName()
:
tts = new TextToSpeech(this, this);
tts.setEngineByPackageName("com.ivona.tts.voicebeta.eng.usa.kendra");
它的Android 2.2.2设备上,但在Android 2.3.4设备上它产生一个NullPointerException异常,具有以下堆栈跟踪:
It works on an Android 2.2.2 device, but on an Android 2.3.4 device it produced a NullPointerException, with the following stack trace:
E/TextToSpeech.java - setEngineByPackageName(3423): NullPointerException
W/System.err(3423): java.lang.NullPointerException
W/System.err(3423): at android.os.Parcel.readException(Parcel.java:1328)
W/System.err(3423): at android.os.Parcel.readException(Parcel.java:1276)
W/System.err(3423): at android.speech.tts.ITts$Stub$Proxy.setEngineByPackageName(ITts.java:654)
W/System.err(3423): at android.speech.tts.TextToSpeech.setEngineByPackageName(TextToSpeech.java:1356)
由于我提供了一个硬codeD字符串参数,我知道这个参数是不是出了什么导致NullPointerException异常。
Since I am providing a hard-coded string parameter, I know that the parameter isn't what's causing the NullPointerException.
我也知道, setEngineByPackageName()是德precated但这只是因为14 API,所以这不能成为理由。
I also know that setEngineByPackageName() is deprecated but that's only since API 14, so this couldn't be the reason.
任何想法,这可能是造成这个NullPointerException异常?
Any idea what could be causing this NullPointerException?
修改:我不会一直关注的为什么,如果这并未导致无尽的轰炸:
EDIT: I wouldn't have been concerned with the "why" if this didn't result in an endless bombardment of:
I/TextToSpeech.java(3652): initTts() successfully bound to service
随后调用的OnInit()
(由系统,而不是我的code)。
Followed by calls to onInit()
(by the system, not by my code).
我的希望是,如果我underderstand为什么发生这种情况,我可以停止的OnInit的轰击()
和从错误中正常恢复。
My hope is that if I underderstand why this is happening, I can stop the bombardment of onInit()
s and recover gracefully from the error.
推荐答案
是TTS引擎你引用安装了2.3.4设备上?如果是,它可能是一个平台错误。
Is the TTS engine you are referencing installed on the 2.3.4 device? If it is, it might be a platform bug.
编辑:
不记得是什么结果我得到了我这样做的时候,但调用 setEngineByPackageName()时,包不存在
是不是一个好主意。检查是否安装了它,不要尝试使用它,如果它不是。是这样的:
Don't remember what results I got when I did this, but calling setEngineByPackageName()
when the package doesn't exists is not a good idea. Check if it is installed and don't try to use it if it's not. Something like:
boolean isPackageInstalled(String packageName) {
PackageManager pm = context.getPackageManager();
try {
PackageInfo pi = pm.getPackageInfo(packageName, 0);
return pi != null;
} catch (NameNotFoundException e) {
return false;
}
}
这篇关于TextToSpeech.setEngineByPackageName()引发NullPointerException异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!