我无法停止在运行Android 5.0.1的Nexus 4上播放AudioTrack
。我做错了吗?
代码非常简单(它实际上只是一个测试应用程序),它在运行2.3.6和4.4的设备上运行良好。这是相关部分:
mPlugReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(Intent.ACTION_HEADSET_PLUG.equals(intent.getAction())) {
boolean plugged = intent.getIntExtra("state", 0) == 1;
if(plugged) {
log.debug("audio device plugged");
boolean mic = intent.getIntExtra("microphone", 0) == 1;
if(mic) {
log.debug("microphone detected");
mPowerTone.play();
}
}
}
else if(AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intent.getAction())) {
log.debug("stopping power tone");
mPowerTone.pause();
mPowerTone.flush();
mPowerTone.stop();
}
}
};
在5.0.1上,它记录“停止电源音”但是音轨继续播放!退出应用程序后,它甚至会继续播放。有时它会在几秒钟后停止,有时我必须强行关闭应用程序。
无论有没有拨打pause()
和flush()
,我都试过了,但无济于事。它可以在旧设备上没有这些调用。
答案 0 :(得分:2)
This unanswered question让我找到了解决方案。如果你在Lollipop上调用AudioTrack#stop()
,即使与实际工作的方法一起使用,播放也不会停止!你必须使用这样的条件:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
mPowerTone.pause();
mPowerTone.flush();
}
else {
mPowerTone.stop();
}
保持良好的工作,谷歌。