0%

Android 音量控制

前言

Android监听音量、修改音量——AudioManager的使用。

方法与参数

  1. 设置声音模式:

    setRingerMode(int ringerMode)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /**
    * 静音模式
    */
    public static final int RINGER_MODE_SILENT = 0;

    /**
    * 震动模式
    */
    public static final int RINGER_MODE_VIBRATE = 1;

    /**
    * 声音模式/响铃模式
    */
    public static final int RINGER_MODE_NORMAL = 2;
  2. 调整声音大小

    adjustVolume(int direction, int flags)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    //direction
    /**
    * 减小音量
    */
    public static final int ADJUST_LOWER = -1;

    /**
    * 增大音量
    */
    public static final int ADJUST_RAISE = 1;

    //flags
    /**
    * 会弹出调节音量的界面
    */
    public static final int FLAG_SHOW_UI = 1 << 0;

    /**
    * 声音调整为最小值时开启振动模式
    */
    public static final int FLAG_ALLOW_RINGER_MODES = 1 << 1;

    /**
    * 调整音量时播放声音
    */
    public static final int FLAG_PLAY_SOUND = 1 << 2;
  3. 获取最大音量和当前音量

    getStreamVolume(int streamType)getStreamMaxVolume(int streamType)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    /**
    * 通话声音
    */
    public static final int STREAM_VOICE_CALL = 0;

    /**
    * 系统声音
    */
    public static final int STREAM_SYSTEM = 1;

    /**
    * 多媒体音量
    */
    public static final int STREAM_MUSIC = 3;

    /**
    * 提示音
    */
    public static final int STREAM_ALARM = 4;
  4. 调整音量为具体数值

    setStreamVolume(int streamType, int index, int flags)

    1
    2
    3
    //streamType 同3
    //flags 同2
    //index 为目标音量

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/**
* AudioManager辅助类
* Created by yooking on 2020/5/9.
* Copyright (c) 2020 yooking. All rights reserved.
*/
public class AudioHelper {

//工厂 - 单例 - 懒汉式 - 线程安全
private static AudioHelper instance;
private static AudioManager manager;

public static synchronized AudioHelper getInstance() {
if (instance == null) {
instance = new AudioHelper();
//这里用ApplicationContext
manager = (AudioManager) AppContext.getInstance().getSystemService(Context.AUDIO_SERVICE);
}
return instance;
}

//获取多媒体最大音量
public int getMediaMaxVolume() {
return manager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
}

//获取多媒体音量
public int getMediaVolume() {
return manager.getStreamVolume(AudioManager.STREAM_MUSIC);
}

//获取通话最大音量
public int getCallMaxVolume() {
return manager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL);
}

//获取通话音量
public int getCallVolume() {
return manager.getStreamVolume(AudioManager.STREAM_VOICE_CALL);
}

//获取系统音量最大值
public int getSystemMaxVolume() {
return manager.getStreamMaxVolume(AudioManager.STREAM_SYSTEM);
}

//获取系统音量
public int getSystemVolume() {
return manager.getStreamVolume(AudioManager.STREAM_SYSTEM);
}

//获取提示音量最大值
public int getAlarmMaxVolume() {
return manager.getStreamMaxVolume(AudioManager.STREAM_ALARM);
}

//获取提示音量最大值
public int getAlarmVolume() {
return manager.getStreamVolume(AudioManager.STREAM_ALARM);
}

//设置多媒体音量
public void setMediaVolume(int volume) {
manager.setStreamVolume(AudioManager.STREAM_MUSIC, //音量类型
volume,
AudioManager.FLAG_PLAY_SOUND
| AudioManager.FLAG_SHOW_UI);
}

//设置通话音量
public void setCallVolume(int volume) {
manager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,
volume,
AudioManager.STREAM_VOICE_CALL);
}

//设置铃声音量
public void setAlarmVolume(int volume) {
manager.setStreamVolume(AudioManager.STREAM_ALARM,
volume,
AudioManager.FLAG_PLAY_SOUND
| AudioManager.FLAG_SHOW_UI);
}

//设置系统音量
public void setSystemVolume(int volume) {
manager.setStreamVolume(AudioManager.STREAM_SYSTEM,
volume,
AudioManager.FLAG_PLAY_SOUND
| AudioManager.FLAG_SHOW_UI);
}

// 关闭/打开扬声器播放
public void setSpeakerStatus(boolean on) {

// 获取当前音频模式,返回值:MODE_NORMAL(普通)、MODE_RINGTONE(铃声)、MODE_IN_CALL(呼叫)或者MODE_IN_COMMUNICATION(通话)
// int mode = manager.getMode();

if (on) { //扬声器
manager.setSpeakerphoneOn(true);
manager.setMode(AudioManager.MODE_NORMAL);
} else {
// 设置成听筒模式
manager.setSpeakerphoneOn(false);// 关闭扬声器
manager.setMode(AudioManager.MODE_IN_COMMUNICATION);

}
}
}
------------本文结束感谢您的阅读------------

Thank you for your accept!