Android AudioManager 音频管理器

Android AudioManager (音频管理器) 位于 Android.Media 包下,提供了音量控制铃声模式 相关操作

获得 AudioManager 对象实例

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

AudioManager 常用方法

方法 说明
adjustVolume(int direction, int flags) 控制手机音量,调大或者调小一个单位
根据第一个参数进行判断
AudioManager.ADJUST_LOWER(调小一个单位)
AudioManager.ADJUST_RAISE (调大一个单位)
adjustStreamVolume(int streamType, int direction, int flags) 同上,不过可以选择调节的声音类型
streamType 参数,指定声音类型
有下述几种声音类型:
STREAM_ALARM :手机闹铃
STREAM_MUSIC :手机音乐
STREAM_RING :电话铃声
STREAM_SYSTEAM :手机系统
STREAM_DTMF :音调
STREAM_NOTIFICATION :系统提示
STREAM_VOICE_CALL :语音电话

第二个参数和上面那个一样,调大或调小音量

可选的标志位
AudioManager.FLAG_SHOW_UI 显示进度条
AudioManager.PLAY_SOUND播放声音
setStreamVolume(int streamType, int index, intflags) 直接设置音量大小
getMode() 返回当前的音频模式
setMode() 设置声音模式。有下述几种模式:
MODE_NORMAL (普通)
MODE_RINGTONE (铃声)
MODE_IN_CALL (打电话)
MODE_IN_COMMUNICATION (通话)
getRingerMode() 返回当前的铃声模式
setRingerMode(int streamType) 设置铃声模式。有下述几种模式:
RINGER_MODE_NORMAL (普通)
RINGER_MODE_SILENT (静音)
RINGER_MODE_VIBRATE (震动)
getStreamVolume(int streamType) 获得手机的当前音量,最大值为 7,最小值为 0
当设置为 0 的时候,会自动调整为震动模式
getStreamMaxVolume(int streamType) 获得手机某个声音类型的最大音量值
setStreamMute(int streamType, boolean state) 将手机某个声音类型设置为静音
setSpeakerphoneOn(boolean on) 设置是否打开扩音器
setMicrophoneMute(boolean on) 设置是否让麦克风静音
isMicrophoneMute() 判断麦克风是否静音或是否打开
isMusicActive() 判断是否有音乐处于活跃状态
isWiredHeadsetOn() 判断是否插入了耳机

其它方法

方法 说明
abandonAudioFocus( AudioManager.OnAudioFocusChangeListener l) 放弃音频的焦点
adjustSuggestedStreamVolume(int,int suggestedStreamType intflags) 调整最相关的流的音量,或者给定的回退流
getParameters(String keys) 给音频硬件设置一个varaible数量的参数值
getVibrateSetting(int vibrateType) 返回是否该用户的振动设置为振动类型
isBluetoothA2dpOn() 检查是否 A2DP 蓝牙耳机音频路由是打开或关闭
isBluetoothScoAvailableOffCall() 显示当前平台是否支持使用SCO的关闭调用用例
isBluetoothScoOn() 检查通信是否使用蓝牙SCO
loadSoundEffects() 加载声音效果
playSoundEffect((int effectType, float volume) 播放声音效果
egisterMediaButtonEventReceiver ( ComponentName eventReceiver) 注册一个组件MEDIA_BUTTON意图的唯一接收机
requestAudioFocus( AudioManager.OnAudioFocusChangeListener l, int streamType,int durationHint) 请求音频的焦点
setBluetoothScoOn(boolean on) 要求使用蓝牙SCO耳机进行通讯
startBluetoothSco/stopBluetoothSco()() 启动/停止蓝牙SCO音频连接
unloadSoundEffects() 卸载音效

设置静音的方法 setStreamMute() 在 API 23 版本过期, 可以使用另一个方法 adjustStreamVolume(int, int, int),然后第三个属性设置:

ADJUST_MUTEADJUST_UNMUTE

如果 adjustStreamVolume() 的第三个参数设置了振动 ( Vibrator ),需要在 AndroidManifest.xml 中添加震动权限

<uses-permission android:name="android.permission.VIBRATE" />

范例

方法和属性很多,有些还涉及到蓝牙,这里我们只讲解最常见的一些方法

使用 Mediaplayer 播放音乐,通过 AudioManager 调节音量大小与静音


  1. 创建一个 空的 Android 项目 cn.twle.android.AudioManager

  2. 在 res 目录上点右键,然后选择 Android resource directory,在弹出的界面中 Resource type 项选择 raw 然后点击 OK

  3. 然后下载范例音频文件 /static/i/android/alarm.mp3 放到 res/raw 目录下

  4. 修改 activity_main.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <Button
            android:id="@+id/btn_start"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="播放" />
    
        <Button
            android:id="@+id/btn_stop"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:enabled="false"
            android:text="停止" />
    
        <Button
            android:id="@+id/btn_higher"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="调高音量" />
    
        <Button
            android:id="@+id/btn_lower"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="调低音量" />
    
        <Button
            android:id="@+id/btn_quite"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="静音" />
    
    </LinearLayout>
    
  5. 修改 MainActivity.java

    package cn.twle.android.audiomanager;
    
    import android.app.Service;
    import android.media.AudioManager;
    import android.media.MediaPlayer;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.os.Build;
    import android.view.View;
    import android.widget.Button;
    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
        private Button btn_start;
        private Button btn_stop;
        private Button btn_higher;
        private Button btn_lower;
        private Button btn_quite;
        private MediaPlayer mePlayer;
        private AudioManager aManager;
        //定义一个标志用来标示是否点击了静音按钮
        private int flag = 1;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //获得系统的音频对象
            aManager = (AudioManager) getSystemService(Service.AUDIO_SERVICE);
            //初始化mediaplayer对象,这里播放的是raw文件中的mp3资源
            mePlayer = MediaPlayer.create(MainActivity.this, R.raw.alarm);
            //设置循环播放:
            mePlayer.setLooping(true);
            bindViews();
        }
    
        private void bindViews() {
            btn_start = (Button) findViewById(R.id.btn_start);
            btn_stop = (Button) findViewById(R.id.btn_stop);
            btn_higher = (Button) findViewById(R.id.btn_higher);
            btn_lower = (Button) findViewById(R.id.btn_lower);
            btn_quite = (Button) findViewById(R.id.btn_quite);
    
            btn_start.setOnClickListener(this);
            btn_stop.setOnClickListener(this);
            btn_higher.setOnClickListener(this);
            btn_lower.setOnClickListener(this);
            btn_quite.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.btn_start:
                    btn_stop.setEnabled(true);
                    mePlayer.start();
                    btn_start.setEnabled(false);
                    break;
                case R.id.btn_stop:
                    btn_start.setEnabled(true);
                    mePlayer.pause();
                    btn_stop.setEnabled(false);
                    break;
                case R.id.btn_higher:
                    // 指定调节音乐的音频,增大音量,而且显示音量图形示意
                    aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                            AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
                    break;
                case R.id.btn_lower:
                    // 指定调节音乐的音频,降低音量,只有声音,不显示图形条
                    aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                            AudioManager.ADJUST_LOWER, AudioManager.FLAG_PLAY_SOUND);
                    break;
                case R.id.btn_quite:
                    // 指定调节音乐的音频,根据isChecked确定是否需要静音
                    flag *= -1;
                    if (flag == -1) {
                        if (Build.VERSION.SDK_INT < 23 )
                            aManager.setStreamMute(AudioManager.STREAM_MUSIC, true); 
                        else 
                            aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_MUTE,AudioManager.FLAG_SHOW_UI);
                        btn_quite.setText("取消静音");
                    } else {
    
                        if (Build.VERSION.SDK_INT < 23 )
                            aManager.setStreamMute(AudioManager.STREAM_MUSIC, false);
                        else
                            aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_UNMUTE,AudioManager.FLAG_SHOW_UI); 
                        aManager.setMicrophoneMute(false);
                        btn_quite.setText("静音");
                    }
                    break;
            }
        }
    }
    

参考文档

  1. Android AudioManager 官方 API 文档

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.