当我使用条形码扫描机架时,我实现了单一类型的soundpool,同时继续扫描,自动关闭应用程序。错误是“无法从包裹中读取输入通道文件描述符”。
public void successfulAlert() {
Logger.d("", "SuccessAlert Start" + Calendar.getInstance().getTimeInMillis());
final int audioID = mSPool.load(Application.getInstance(), R.raw.scan, 1);
mSPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
Logger.d("", "SuccessAlert Completed " + Calendar.getInstance().getTimeInMillis());
float volume = (float) mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
mSPool.play(audioID, volume, volume, 1, 0, 1f);
/// cleanupSound();
}
});
Logger.d(TAG, "Possitive Scan Beep ");
}
此代码为成功警报,我尝试清理soundpool发布,声音没有听到。任何人都可以建议我,播放声音后如何释放soundpool。
public void cleanupSound() {
if (mSPool != null) {
mSPool.release();
// mSPool=null;
// mAudioManager.unloadSoundEffects();
// mInstance=null;
}
}
答案 0 :(得分:1)
该问题有两个方面: 1)为什么我的声音没有播放? 2)如何正确释放SoundPool?
For 1 - SoundPool播放是异步的。你正在做:“播放然后释放”但你需要做“玩然后等待直到游戏完成然后发布”。
For 2 - 由于1,你不应该在游戏完成之前释放SoundPool。不幸的是,无法要求SoundPool在完成播放后进行回调。我已经看到了两个解决方案:
release
中的postDelayed
来安排Handler
,以及将来的X毫秒。< / LI>
注意:要成为一个真正表现良好的Android公民,您的应用程序应该只播放声音,如果它首先获得并继续保持音频焦点。有关详细信息,请访问:https://developer.android.com/guide/topics/media-apps/volume-and-earphones.html