zoukankan      html  css  js  c++  java
  • Android audioManager

    Android audioManager

    AudioManager provides access to volume and ringer mode control.

    获取对象

    Use Context.getSystemService(Context.AUDIO_SERVICE) to get an instance of this class.

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

    //通话音量
    int max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_VOICE_CALL );
    int current = mAudioManager.getStreamVolume( AudioManager.STREAM_VOICE_CALL );
    Log.d(“VIOCE_CALL”, “max : ” + max + ” current : ” + current);


    //系统音量
    max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_SYSTEM );
    current = mAudioManager.getStreamVolume( AudioManager.STREAM_SYSTEM );
    Log.d(“SYSTEM”, “max : ” + max + ” current : ” + current);

    //铃声音量
    max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_RING );
    current = mAudioManager.getStreamVolume( AudioManager.STREAM_RING );
    Log.d(“RING”, “max : ” + max + ” current : ” + current);

    //音乐音量
    max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_MUSIC );
    current = mAudioManager.getStreamVolume( AudioManager.STREAM_MUSIC );
    Log.d(“MUSIC”, “max : ” + max + ” current : ” + current);

    //提示声音音量
    max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_ALARM );
    current = mAudioManager.getStreamVolume( AudioManager.STREAM_ALARM );
    Log.d(“ALARM”, “max : ” + max + ” current : ” + current);

    获取当前正在播放音频的硬件信息

    if (isBluetoothA2dpOn()) {
        // Adjust output for Bluetooth. 蓝牙设备 }
    else if (isSpeakerphoneOn()) {
         // Adjust output for Speakerphone. 内置扬声器(免提) }
    else if (isWiredHeadsetOn()) {
        // Adjust output for headsets 有线耳机 }
    else {
        // If audio plays and noone can hear it, is it still playing? 未知设备 }

    出现硬件设备切换的时候,Android 会发送系统广播 ACTION_AUDIO_BECOMING_NOISY ,您的应用程序中应该注册一个 BroadcastReceiver 来监听这个消息,当出现这种情况的时候,如果正在听音乐,较好的设计方案是暂停当前音乐的播放,如果正在玩游戏,那么尽量降低游戏的音量是个不错的解决方法。

    image

    几个比较常用到的方法:
    方法1:adjustVolume(int direction, int flags)
    解释:这个方法用来控制手机音量大小,当传入的第一个参数为 AudioManager.ADJUST_LOWER 时,可将音量调小一个单位,传入 AudioManager.ADJUST_RAISE 时,则可以将音量调大一个单位。
    方法2:getMode()
    解释:返回当前音频模式。
    方法3:getRingerMode()
    解释:返回当前的铃声模式。
    方法4:getStreamVolume(int streamType)
    解释:取得当前手机的音量,最大值为7,最小值为0,当为0时,手机自动将模式调整为“震动模式”。

      注意: 分为9个单位 静音(0),震动(0),1----7 九个等级。从静音调为1时,需要调大两个等级. 
    方法5:setRingerMode(int ringerMode)
    解释:改变铃声模式

    //声音模式
    AudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
    //静音模式
    AudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
    //震动模式
    AudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);

        //打开扬声器

             audioManager.setMode(AudioManager.ROUTE_SPEAKER);
             currVolume = audioManager.getStreamVolume(AudioManager.STREAM_VOICE_CALL);
             if(!audioManager.isSpeakerphoneOn()) {
                  audioManager.setSpeakerphoneOn(true);
                  audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,
                      audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL ),
                      AudioManager.STREAM_VOICE_CALL);
             }

         // 关闭扬声器

            if(audioManager.isSpeakerphoneOn()) {
                 audioManager.setSpeakerphoneOn(false);
                 audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,currVolume,
                       AudioManager.STREAM_VOICE_CALL);
            }

  • 相关阅读:
    本地项目上传到github
    linux 常用命令
    mysql 查询日志基本操作
    js 短信60秒倒计时
    windows下 mysql 移库
    INSERT INTO table(xxx) VALUES (xxx)
    springboot 项目接口调用失败
    P1093 奖学金
    P1403约数研究
    P1147连续自然数和
  • 原文地址:https://www.cnblogs.com/longhs/p/3337429.html
Copyright © 2011-2022 走看看