簡體   English   中英

在Android Audiomanager中調整音量不正確

[英]Adjusting Volume in Android Audiomanager is inaccurate

在我的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個步驟!

誰能給我提示如何解決這個問題? 我想分十步設置音量:

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

我該如何實現?

您擁有不同步數的原因可能是因為兩個不同的音頻流會受到影響-例如,系統音頻流(可能具有7個步驟)和媒體音頻流(可能具有15個步驟)。

步驟的數量因各種android設備而異,並且在系統中定義。 另請參閱android bug跟蹤器中的此問題

根據您的設備,有不同的方法可以進行更好的調整。 您可能可以在android stackexchange網站上找到更多信息。

我已經解決了這個問題:

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM