Java 是什么导致setVolume在谷歌像素上工作,而不是在Galaxy S9上工作?

Java 是什么导致setVolume在谷歌像素上工作,而不是在Galaxy S9上工作?,java,android,Java,Android,我目前正在尝试使用setVolume功能通过左、右或两个通道输出MediaPlayer音频。在测试过程中,该功能在运行9.0 Pie的Google Pixel 2 XL上按预期工作。在我的第二台设备(运行8.0 Oreo的三星Galaxy S9)上进行测试时,音频在两个频道上播放,并且似乎不受setVolume调用的影响 我在控制台中没有任何错误,因此我不太确定从何处开始故障排除。如上所述,该应用程序经过测试,可用于像素2 XL w/9.0饼图,但不适用于Galaxy S9 w/8.0 Oreo

我目前正在尝试使用setVolume功能通过左、右或两个通道输出MediaPlayer音频。在测试过程中,该功能在运行9.0 Pie的Google Pixel 2 XL上按预期工作。在我的第二台设备(运行8.0 Oreo的三星Galaxy S9)上进行测试时,音频在两个频道上播放,并且似乎不受setVolume调用的影响

我在控制台中没有任何错误,因此我不太确定从何处开始故障排除。如上所述,该应用程序经过测试,可用于像素2 XL w/9.0饼图,但不适用于Galaxy S9 w/8.0 Oreo

private void audioTestFunction(){
if(audioSwitch.isChecked()){
coolChangeEffect(“停止音频测试”,音频开关);
mp=MediaPlayer.create(getApplicationContext(),R.raw.audio\u test);
mp.setLooping(真);
mp.start();
开关(channels.getCheckedRadioButtonId()){
案例R.id.左通道按钮:
mp.设定音量(1.0f,0.0f);
打破
案例R.id.两个通道按钮:
mp.设定音量(1.0f,1.0f);
打破
案例R.id.右通道按钮:
mp.设定音量(0.0f,1.0f);
打破
违约:
mp.设定音量(1.0f,1.0f);
打破
}
}否则{
coolChangeEffect(“音频测试”,音频开关);
mp.stop();
}
}

当在像素2 XL上执行时,应用程序根据选择的单选按钮设置每个通道的音量。在Galaxy S9上执行时,无论选择了哪个单选按钮,应用程序都会在两个频道上继续播放,而不会改变音量。

在调用
mp.start()
几毫秒后,您的MediaPlayer可能仍处于空闲状态。在中,它表示如果从空闲状态调用
setVolume
,则不会抛出错误,但是不会遇到MediaPlayer状态的更改

如果这是一个问题,一个潜在的修复程序将等待
mp.isPlaying()
返回true,然后再输入switch语句。三星的音频驱动程序有可能延迟很小,这就是导致此问题的原因

Android文档的引用:

调用reset()后,新构造的MediaPlayer对象与MediaPlayer对象之间存在细微但重要的区别。调用setVolume(float,float)等方法是编程错误。。。在这两种情况下都处于空闲状态

如果在构造MediaPlayer对象后立即调用这些方法中的任何一个,则内部播放器引擎将不会调用用户提供的回调方法OnErrorListener.onError(),并且对象状态保持不变;但是,如果在reset()之后立即调用这些方法,则内部播放器引擎将调用用户提供的回调方法OnErrorListener.onError(),并且对象将转换为错误状态

问题解决了

原始代码是正确的,Galaxy S9需要更新为Android 9.0 Pie,以便
setVolume()
功能正常工作。


根据@Dylan的提示,我相信这只是三星方面的一个缺陷,因为系统更新是解决方案

这是如何试图回答这个问题的……甚至是如何解释差异的?@Dylan我尝试过实现一个解决方案,检查何时
mp.isPlaying()
,以及一个利用
mp.setOnPreparedListener()
的解决方案,但这两个解决方案似乎都没有解决Galaxy S9上的问题。Pixel 2 XL在两次解决方案尝试中都能如期运行。哇。这真的很有趣,我想知道这是否是三星方面的一个错误。你试过马丁的答案吗?这似乎没有关系,但也许。。另外,我会尝试更改音量,并在两个参数中输入相同的值。Martin的回答让我想尝试一下,但我不支持你。我尝试再次尝试@MartinZeitler的建议,但看起来我只能测试扬声器,但不能更改任何设置。为了澄清我不是在测试手机的扬声器,我是在尝试将音频输出到左声道、右声道或两个声道。@Dylan我将尝试使用您所说的
setVolume
功能调整音量(因此
setVolume(0.5f,0.5f)
),看看是否有结果。