ToneGenerator разбился Android

Пару дней назад я получил журнал сбоев в своем выпущенном приложении.

Ошибка возникает от ToneGenerator, и я не могу найти проблему.

Здесь у меня есть таймер обратного отсчета, когда таймер достигает 0, приложение запускает ToneGenerator.

private void lanceMinuteur(int temps, int color){ if(color == 0) minuteur.setTextColor(getResources().getColor(R.color.color_important)); else minuteur.setTextColor(getResources().getColor(R.color.color_informative)); if(chronoLance){ chrono.cancel(); } chronoLance = true; chrono = new CountDownTimer((temps + 1) * 1000, 1000) { public void onTick(long millisUntilFinished) { minuteur.setText(String.valueOf(millisUntilFinished / 1000) + "\""); } public void onFinish() { minuteur.setText("0\""); minuteur.setTextColor(getResources().getColor(R.color.textcolor1design)); chronoLance = false; final ToneGenerator tg = new ToneGenerator(AudioManager.STREAM_NOTIFICATION, 100); //The error is coming from here tg.startTone(ToneGenerator.TONE_PROP_ACK); } }.start(); } 

И журнал аварии, который я получил:

 java.lang.RuntimeException: Init failed at android.media.ToneGenerator.native_setup(Native Method) at android.media.ToneGenerator.<init>(ToneGenerator.java:798) at ma.myperf.musculation.activ.GoPerformanceActivity$2.onFinish(GoPerformanceActivity.java:350) at android.os.CountDownTimer$1.handleMessage(CountDownTimer.java:118) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:150) at android.app.ActivityThread.main(ActivityThread.java:4385) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607) at dalvik.system.NativeStart.main(Native Method) 

Так в чем же проблема? Я пробовал, если у ToneGenerator есть попытка Catch block, но не было.

Я думаю, что, возможно, устройство, где произошел сбой, не было AudioManager.Stream_Notification?

Я нашел это здесь :

Похоже, ваше приложение не выпускает ресурсы медиаплеера. Когда вы закончите воспроизведение звука, вам нужно вызвать метод MediaPlayer.release (). Если вы играете много звуков быстро, сборщик мусора не сможет идти в ногу.

Я использовал SoundPool для решения моей проблемы. Я читал, что SoundManager был лучшим вариантом для воспроизведения короткого звукового эффекта, поэтому я использовал решение, размещенное здесь, потому что ToneGenerator слишком неустойчив.

 public void initSounds(Context theContext, int nbMaxSons) { mContext = theContext; mSoundPool = new SoundPool(nbMaxSons, AudioManager.STREAM_MUSIC, 0); mSoundPoolMap = new HashMap<Integer, Integer>(); mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); } public void addSound(int index, int soundID) { mAvailibleSounds.add(index); mSoundPoolMap.put(index, mSoundPool.load(mContext, soundID, 1)); } public void playSound(int index) { // dont have a sound for this obj, return. if (mAvailibleSounds.contains(index)) { int streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); int soundId = mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 1, 0, 1f); mKillSoundQueue.add(soundId); // schedule the current sound to stop after set milliseconds mHandler.postDelayed(new Runnable() { public void run() { if (!mKillSoundQueue.isEmpty()) { mSoundPool.stop(mKillSoundQueue.firstElement()); } } }, 3000); } } 

Поэтому мне интересно, какое использование можно использовать для ToneGenerator, когда это часто происходит сбой.