【问题标题】:Adjusting Volume in Android Audiomanager is inaccurate在 Android Audiomanager 中调整音量不准确
【发布时间】:2015-12-16 19:36:27
【问题描述】:

在我的 Android 应用程序中,我有一个方法可以调节音量。这就像它应该的那样工作。

public void adjustVolume(int adjustType){
    if(myAudioManager == null) {
        myAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    }
    if (adjustType == 0){

        myAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);

        Toast.makeText(getApplicationContext(), "mute audio", Toast.LENGTH_SHORT).show();
    }
    else if(adjustType == 1) {
        myAudioManager.adjustVolume(AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI);
        Toast.makeText(getApplicationContext(), "decrease volume", Toast.LENGTH_SHORT).show();
    }
    else if (adjustType == 2){
        myAudioManager.adjustVolume(AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
        Toast.makeText(getApplicationContext(), "increase volume", Toast.LENGTH_SHORT).show();
    }
    else if (adjustType == 3){
        int maxVolume = myAudioManager.getStreamMaxVolume(AudioManager.STREAM_SYSTEM);
        myAudioManager.setStreamVolume(AudioManager.STREAM_SYSTEM, maxVolume, AudioManager.FLAG_SHOW_UI);
        Toast.makeText(getApplicationContext(), "Max volume", Toast.LENGTH_SHORT).show();
    }

    Log.d(LOG_TAG, "Volume is " + myAudioManager.getStreamVolume(AudioManager.STREAM_SYSTEM));
}

例如我可以拨打adjustVolume(1) 降低音量,拨打adjustVolume(2) 提高音量。从零音量到最大音量需要 15 步

到目前为止,一切都很好。

现在我有另一种方法,我想直接设置音量:

public void adjustVolumeDirect(int volumeValue) {
    if(myAudioManager == null) {
        myAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    }

    //maxVolume is 7
    int maxVolume = myAudioManager.getStreamMaxVolume(AudioManager.STREAM_SYSTEM);

    float factor = (float)volumeValue / 100;
    int targetVolume = (int) (maxVolume * factor);

    Log.d(LOG_TAG,"MAX_VOLUME = "+maxVolume+" VOLUMEVALUE = " +volumeValue+ " TARGET VOLUME = " + targetVolume + "factor = " + factor);
    myAudioManager.setStreamVolume(AudioManager.STREAM_SYSTEM,targetVolume , AudioManager.FLAG_SHOW_UI);

}

例如 adjustVolumeDirect(100) 应将音量设置为最大。 adjustVolumeDirect(50) 应该设置为 50% 等等。 这部分不像我预期的那样工作。我只能设置7个步骤的音量!上面的方法给了我15个步骤!

谁能给我一个提示如何解决这个问题? 我想分 10 步设置音量:

adjustVolumeDirect(10) = 10%
adjustVolumeDirect(20) = 20%
...
adjustVolumeDirect(100) = 100%

我怎样才能做到这一点?

【问题讨论】:

    标签: java android android-audiomanager


    【解决方案1】:

    您有不同数量的步骤的原因可能是因为两个不同的音频流受到影响 - 例如系统音频流可能有 7 个步骤和媒体音频流可能有 15 个步骤。

    各种安卓设备的步数不同,在系统中定义。另见this issue in the android bug tracker

    根据您的设备,有不同的方法可以进行更精细的调整。您可能可以找到更多信息here on the android stackexchange site

    【讨论】:

      【解决方案2】:

      我已经解决了这个问题:

      mAudioManager.getStreamMaxVolume(audio.STREAM_MUSIC)**/3**
      mAudioManager.getStreamMaxVolume(audio.STREAM_MUSIC)**/2**
      
      mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, audio.getStreamMaxVolume(mAudioManager.STREAM_MUSIC)/3, AudioManager.FLAG_SHOW_UI);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多