Android AudioManager 无法在 Samsung 4.0.4 上运行

Android AudioManager not working on Samsung 4.0.4

目前正在调用 AudioManager 来更改我的应用程序的音量 - 适用于 nexus、hudl 和 samsung galaxy s5 - 但是,当我 运行 在 Samsung Galaxy 10"inch 运行ning android 4.0.4 除非按下音量的实际硬键,否则音量不会改变。

         myAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

         myAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,level,AudioManager.FLAG_PLAY_SOUND);

知道为什么它不起作用吗?

调用 isVolumeFixed 检查设备是否支持该功能。 AudioManager

This method has no effect if the device implements a fixed volume policy as indicated by isVolumeFixed().

下面的代码适用于三星设备。

public static boolean changeStreamVolume(int sign) {
        final AudioManager am = (AudioManager)ApplicationAdapter.getInstance().getApplicationContext().getSystemService(Context.AUDIO_SERVICE);
        final int currentVolume = am.getStreamVolume(AudioManager.STREAM_MUSIC);
        final int maxVolume = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);

        if (sign == 1 && currentVolume >= maxVolume) {
            return false;
        }
        else if (sign == -1 && currentVolume <= 0) {
            return false;
        }

        // Why 11? Why not? :-)
        final int delta = (maxVolume >= 11? maxVolume / 11  : 1) * sign;
        int newVolume = (currentVolume + delta > maxVolume ? maxVolume : currentVolume + delta);
        if (newVolume < 0) {
            newVolume = 0;
        }
        am.setStreamVolume(AudioManager.STREAM_MUSIC, newVolume, AudioManager.FLAG_SHOW_UI);
        return true;
    }

适用于不同版本 android 并构成 (nexus,samsung, hudl, samsung galaxy 10") 的答案如下:

    AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    am.adjustSteamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_RAISE,AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);

要降低音量,只需将 AudioManager.ADJUST_RAISE 替换为 AudioManager.ADJUST_LOWER。

我发现的 setStreamVolume 不包含经过测试的 android 版本或品牌。