In my application i am using ToneGenerator to play simple sound. When test my application by compiling the application with 6.0, my application randomy crashing due to ToneGenerator init method. Below is the exception.
java.lang.RuntimeException: Init failed
04-21 12:34:05.497 7166 7166 E MyApplication: at android.media.ToneGenerator.native_setup(Native Method)
04-21 12:34:05.497 7166 7166 E MyApplication: at android.media.ToneGenerator.<init>(ToneGenerator.java:746)
I am using the tone generator in below way.
public ToneGenerator toneGenerator;
public void playSound() {
if (toneGenerator == null) {
toneGenerator = new ToneGenerator(AudioManager.STREAM_NOTIFICATION, 100);
}
toneGenerator.startTone(ToneGenerator.TONE_CDMA_ANSWER, 200);
}
public void releaseToneGenerator() {
if (toneGenerator != null) {
toneGenerator.release();
}
}
Any one faced same issue?..Previously my application was running on 4.4 and in that we did not observe any crash. In in 6.0 application is crashing
Solved the issue by using handler.
private static void playTone(Context context, int mediaFileRawId) {
Log.d(TAG, "playTone");
try {
if (toneGenerator == null) {
toneGenerator = new ToneGenerator(AudioManager.STREAM_NOTIFICATION, 100);
}
toneGenerator.startTone(mediaFileRawId, 200);
Handler handler = new Handler(Looper.getMainLooper());
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (toneGenerator != null) {
Log.d(TAG, "ToneGenerator released");
toneGenerator.release();
toneGenerator = null;
}
}
}, 200);
} catch (Exception e) {
Log.d(TAG, "Exception while playing sound:" + e);
}
}