【问题标题】:Can't change volume correctly (setVolume)无法正确更改音量 (setVolume)
【发布时间】:2019-07-07 05:26:56
【问题描述】:

我正在开发一个需要以不同音量播放系统通知的应用,并且在让 setVolume 正常工作方面存在一些问题。

为了调试它,我准备了一个带有两个按钮的示例应用程序,允许我以低音量或高音量播放系统通知。到目前为止,该应用程序工作正常,声音从扬声器中发出。 但是,无论我按哪个顺序按低音量和高音量按钮,一旦我以低音量播放通知,它就会一直保持在低音量,我无法让它再次以更高的音量播放。

下面是我的代码。我使用了一个 oncompletion 回调来增加一个计数器并发出 3 次通知。

public class MainActivity extends AppCompatActivity {

int soundsCounter = 0; // Counts how many times the notification has sounded
double playbackVolume = 1.0; // Playback volume of the notification
AudioManager audioManager;
MediaPlayer thePlayer;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //Setup the media player
    audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    thePlayer = MediaPlayer.create(getApplicationContext(), RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));

    // Initialize listener using setOnCompletionListener for mediaPlayer object
    // and declare new method OnComletionListener as an argument.
    thePlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        // Override onCompletion method to apply desired operations.
        @Override
        public void onCompletion(MediaPlayer mediaPlayer){
            soundsCounter++;
            if (soundsCounter < 3){ // Sound the notification 3 times
                playNotification();
            }

        }
    } );
}

// Plays system notification at the selected volume
private void playNotification() {
    try {
        thePlayer.setVolume(((float) (audioManager.getStreamVolume(AudioManager.STREAM_NOTIFICATION) * playbackVolume)),
                (float) (audioManager.getStreamVolume(AudioManager.STREAM_NOTIFICATION) * playbackVolume));
    }
    thePlayer.start();
}


// Called when the user taps the HighV button
public void playHighV(View view) {
    soundsCounter = 0;
    playbackVolume = 1.0;
    playNotification();
}


// Called when the user taps the LowV button
public void playLowV(View view) {
    soundsCounter = 0;
    playbackVolume = 0.02;
    playNotification();
}

任何想法去哪里看?谢谢!

【问题讨论】:

标签: android android-mediaplayer


【解决方案1】:

感谢 Oemel09,我意识到我在传递给 setVolume 的参数中犯了一些错误。

这是运行良好的新代码:

public class MainActivity extends AppCompatActivity {

int soundsCounter = 0; // Counts how many times the notification has sounded
float playbackVolume = 1; // Playback volume of the notification
AudioManager audioManager;
MediaPlayer thePlayer;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //Setup the media player
    audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    thePlayer = MediaPlayer.create(getApplicationContext(), RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));

    // Initialize listener using setOnCompletionListener for mediaPlayer object
    // and declare new method OnComletionListener as an argument.
    thePlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        // Override onCompletion method to apply desired operations.
        @Override
        public void onCompletion(MediaPlayer mediaPlayer){
            soundsCounter++;
            if (soundsCounter < 3){ // PLay sound 3 times
                playNotification();
            }

        }
    } );
}

// Plays system notification at the selected volume
private void playNotification() {
    thePlayer.setVolume(playbackVolume, playbackVolume);
    thePlayer.start();
}

// Called when the user taps the HighV button
public void playHighV(View view) {
    soundsCounter = 0;
    playbackVolume = 1f;
    playNotification();
}

// Called when the user taps the LowV button
public void playLowV(View view) {
    soundsCounter = 0;
    playbackVolume = 0.1f;
    playNotification();
}

}

【讨论】:

    猜你喜欢
    • 2012-01-13
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-01
    相关资源
    最近更新 更多