无法在 Android 5 上停止 AudioTrack

Cannot stop AudioTrack on Android 5

我无法在 Nexus 4 运行 Android 5.0.1 上停止播放 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 上,它记录 "stopping power tone" 但曲目继续播放!它甚至在我退出应用程序后继续播放。有时候过几秒就停了,有时候还得强行关掉。

无论是否调用 pause()flush(),我都尝试过,但都无济于事。它在旧设备上没有这些调用就可以工作。

This unanswered question 让我找到了解决方案。如果你在 Lollipop 上调用 AudioTrack#stop(),即使结合实际有效的方法,播放也不会停止!您必须使用这样的条件:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    mPowerTone.pause();
    mPowerTone.flush();                     
}
else {
    mPowerTone.stop();
}

继续努力,Google。