标志参数的含义和droid设备的最小和最大可能范围

Xar*_*mer 6 android volume android-audiomanager

  1. 我想知道什么是标志(或标志的可能值是什么)

    audiomanager.setStreamVolume(int streamType,int index,int flags);

  2. 我知道我们可以使用最大流

    audiomanger.getMaxStream(audioManager.getStreamMax(AudioManager.STREAM_MUSIC));

但在某些设备中它给出了13,15,这取决于Android版本或设备硬件以及它的范围是什么(最小可能值,最大可能值)

设置特定流的卷索引.

如果设备实现了isVolumeFixed()所指示的固定卷策略,则此方法无效.//这是什么意思.

参数

streamType  The stream whose volume index should be set.

index   The volume index to set. See getStreamMaxVolume(int) for the largest valid value.

flags   One or more flags. // what are these flags 
Run Code Online (Sandbox Code Playgroud)

Deb*_*ish 14

关于flag参数:AudioManager.java中定义了一些标志.您可以使用其中任何一个来获得所需的效果.例如:

audioManager.setStreamVolume(audioManager.STREAM_MUSIC,progress,AudioManager.FLAG_SHOW_UI);
Run Code Online (Sandbox Code Playgroud)

或者干脆

audioManager.setStreamVolume(audioManager.STREAM_MUSIC,progress,1);
Run Code Online (Sandbox Code Playgroud)

这是来自AudioManager.java的代码段,显示它们是如何定义的.

public static final int FLAG_SHOW_UI = 1 << 0;

/**
 * Whether to include ringer modes as possible options when changing volume.
 * For example, if true and volume level is 0 and the volume is adjusted
 * with {@link #ADJUST_LOWER}, then the ringer mode may switch the silent or
 * vibrate mode.
 * <p>
 * By default this is on for the ring stream. If this flag is included,
 * this behavior will be present regardless of the stream type being
 * affected by the ringer mode.
 *
 * @see #adjustVolume(int, int)
 * @see #adjustStreamVolume(int, int, int)
 */
public static final int FLAG_ALLOW_RINGER_MODES = 1 << 1;

/**
 * Whether to play a sound when changing the volume.
 * <p>
 * If this is given to {@link #adjustVolume(int, int)} or
 * {@link #adjustSuggestedStreamVolume(int, int, int)}, it may be ignored
 * in some cases (for example, the decided stream type is not
 * {@link AudioManager#STREAM_RING}, or the volume is being adjusted
 * downward).
 *
 * @see #adjustStreamVolume(int, int, int)
 * @see #adjustVolume(int, int)
 * @see #setStreamVolume(int, int, int)
 */
public static final int FLAG_PLAY_SOUND = 1 << 2;

/**
 * Removes any sounds/vibrate that may be in the queue, or are playing (related to
 * changing volume).
 */
public static final int FLAG_REMOVE_SOUND_AND_VIBRATE = 1 << 3;

/**
 * Whether to vibrate if going into the vibrate ringer mode.
 */
public static final int FLAG_VIBRATE = 1 << 4;

/**
 * Indicates to VolumePanel that the volume slider should be disabled as user
 * cannot change the stream volume
 * @hide
 */
public static final int FLAG_FIXED_VOLUME = 1 << 5;

/**
 * Indicates the volume set/adjust call is for Bluetooth absolute volume
 * @hide
 */
public static final int FLAG_BLUETOOTH_ABS_VOLUME = 1 << 6;

/**
 * Adjusting the volume was prevented due to silent mode, display a hint in the UI.
 * @hide
 */
public static final int FLAG_SHOW_SILENT_HINT = 1 << 7;

/**
 * Indicates the volume call is for Hdmi Cec system audio volume
 * @hide
 */
public static final int FLAG_HDMI_SYSTEM_AUDIO_VOLUME = 1 << 8;

/**
 * Indicates that this should only be handled if media is actively playing.
 * @hide
 */
public static final int FLAG_ACTIVE_MEDIA_ONLY = 1 << 9;

/**
 * Like FLAG_SHOW_UI, but only dialog warnings and confirmations, no sliders.
 * @hide
 */
public static final int FLAG_SHOW_UI_WARNINGS = 1 << 10;

/**
 * Adjusting the volume down from vibrated was prevented, display a hint in the UI.
 * @hide
 */
public static final int FLAG_SHOW_VIBRATE_HINT = 1 << 11;

/**
 * Adjusting the volume due to a hardware key press.
 * @hide
 */
public static final int FLAG_FROM_KEY = 1 << 12;
Run Code Online (Sandbox Code Playgroud)