TextToSpeech.setEngineByPackageName () throws a NullPointerException

My activity onInit()contains a call TextToSpeech.setEngineByPackageName():

  tts = new TextToSpeech(this, this);
  tts.setEngineByPackageName("com.ivona.tts.voicebeta.eng.usa.kendra");

It works on an Android 2.2.2 device, but on an Android 2.3.4 device, it threw 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)

Since I provide a string string parameter, I know that this parameter does not cause a NullPointerException.

I also know that setEngineByPackageName () is deprecated, but this is only with API 14, so this cannot be the reason.

Any idea what could throw this NullPointerException?

EDIT : I would not be interested in “why” if this did not result in an endless bombardment:

I/TextToSpeech.java(3652): initTts() successfully bound to service

onInit() (, ).

, , , onInit() .

+2
2

TTS, , 2.3.4? , .

EDIT: , , , setEngineByPackageName(), , . , , . - :

boolean isPackageInstalled(String packageName) {
  PackageManager pm = context.getPackageManager();
  try {
    PackageInfo pi = pm.getPackageInfo(packageName, 0);

    return pi != null;
  } catch (NameNotFoundException e) {
    return false;
  }
}
+4

, :

NullPointerException setEngineByPackageName() catch try:

try {
    result = mITts.setEngineByPackageName(enginePackageName);
    if (result == TextToSpeech.SUCCESS){
        mCachedParams[Engine.PARAM_POSITION_ENGINE + 1] = enginePackageName;
    }
} 

, null:

  • mCachedParams

mCachedParams , . , mITts:

TextToSpeech.initTts(), 2 , mITts :

  • onServiceConnected()
  • onServiceDisconnected()

2.3.4? .

: TextToSpeech.initTts() :

mContext.bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE);
// TODO handle case where the binding works (should always work) but
//      the plugin fails

, onInit() ( "initTts() " ): , , " ".

, ...

+1

All Articles