无法在Android 5上停止AudioTrack

时间:2015-02-25 07:06:51

标签: android android-5.0-lollipop audiotrack

我无法停止在运行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(),我都试过了,但无济于事。它可以在旧设备上没有这些调用。

1 个答案:

答案 0 :(得分:2)

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

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

保持良好的工作,谷歌。