无法在 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。
我无法在 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。