Android AudioManager

Android 之 AudioManager ( 音频管理器 ) 本节我们就来学下这个东东的用法,你可以写一个Demo,一个简单的静音,每次看小电影之前,先 进Demo点下静音,然后。在多媒体的第一节,我们用SoundPool写了个Duang的示例,小猪点击一个按钮后,突然发出"Duang"的 一声,而且当时的声音很大,吓死宝宝了。//23以后的版本用这个。// 指定调节音乐的音频,降低音量,只有声音,不显示图形条。// 指定调节音乐的音频,增大音量,而且显示音量图形示意。嘿嘿,属性蛮多的,有些还涉及到蓝牙这些东东,这里我们只讲解最常见的一些方法! 阅读详情

本章内容是android.media.AudioManager  

结构

  继承关系

  public class AudioManager extends Object

  java.lang.Object

  android.media.AudioManager


  类概述

  AudioManager类提供访问音量和振铃模式的控制。

  用Context.getSystemService(Context.AUDIO_SERVICE)得到这个类的实例。

  常量

  public static final String ACTION_AUDIO_BECOMING_NOISY

  广播intent,提示应用程序音频信号由于音频输出的变化将变得“嘈杂”。例如,当拔出一个有线耳机,或断开一个支持A2DP的音频接收器,这个

intent就会被发送,且音频系统将自动切换音频线路到扬声器。收到这个intent后,控制音频流的应用程序会考虑暂停,减小音量或其他措施,以免扬

声器的声音使用户惊奇。

  常量值:\"android.media.AUDIO_BECOMING_NOISY\"

  public static final String ACTION_SCO_AUDIO_STATE_CHANGED

  广播intent,表明蓝牙SCO音频连接状态已改变。这个intent包含额外信息:EXTRA_SCO_AUDIO_STATE,它表明新的状态是

SCO_AUDIO_STATE_DISCONNECTED或SCO_AUDIO_STATE_CONNECTED。

  参照

  startBluetoothSco()

  常量值:\"android.media.SCO_AUDIO_STATE_CHANGED\"

  public static final int ADJUST_LOWER

  减小铃声音量。


  参照

  adjustVolume(int, int)

  adjustStreamVolume(int, int, int)


  常量值: -1 (0xffffffff)

  public static final int ADJUST_RAISE

  增大铃声音量。


  参照

  adjustVolume(int, int)

  adjustStreamVolume(int, int, int)


  常量值: 1 (0x00000001)

  public static final int ADJUST_SAME


  保持先前的铃声音量。当需要toast显示音量而不修改它时可能是有用的。


  参照

  adjustVolume(int, int)

  adjustStreamVolume(int, int, int)


  常量值: 0 (0x00000000)

  public static final int AUDIOFOCUS_GAIN

  用来指示获得音频焦点,请求音频焦点,未知持续时间


  参照

  onAudioFocusChange(int)

  requestAudioFocus(OnAudioFocusChangeListener, int, int)


  常量值: 1 (0x00000001)

  public static final int AUDIOFOCUS_GAIN_TRANSIENT

  用来指示临时获得或请求音频焦点,预期持续很短的时间。临时改变的例子是操纵方向的回放,或一个事件的通知。


  参照

  onAudioFocusChange(int)

  requestAudioFocus(OnAudioFocusChangeListener, int, int)


  常量值: 2 (0x00000002)

  public static final int AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK 用来指示一个临时的音频焦点请求,预期持续很短的时间,其它音频程

序降低他们的输出级别后保持播放是可接受的(也被称为“ducking”)。临时改变的例子是操纵方向的回入,在后台回放音乐是可接受的。


  参照

  onAudioFocusChange(int)

  requestAudioFocus(OnAudioFocusChangeListener, int, int)


  常量值: 3 (0x00000003)

  public static final int AUDIOFOCUS_LOSS

  用来指示在未知持续时间内丢失音频焦点


  参照

  onAudioFocusChange(int)


  常量值: -1 (0xffffffff)

  public static final int AUDIOFOCUS_LOSS_TRANSIENT

  用来指示暂时的丢失音频焦点。


  参照

  onAudioFocusChange(int)


  常量值: -2 (0xfffffffe)

  public static final int AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK

  用来指示暂时的丢失音频焦点,若音频焦点的丢失者想继续播放,它会降低自己的输出

  音量(也被称为“ducking”),因为新的焦点拥有者不要求其它静音。


  参照

  onAudioFocusChange(int)


  常量值: -3 (0xfffffffd)

  public static final int AUDIOFOCUS_REQUEST_FAILED

  一个失败的焦点转移请求。


  常量值: 0 (0x00000000)

  public static final int AUDIOFOCUS_REQUEST_GRANTED

  一个成功的焦点转移请求。


  常量值: 1 (0x00000001)

  public static final String EXTRA_RINGER_MODE

  新的振铃模式。


  参照

  RINGER_MODE_CHANGED_ACTION

  RINGER_MODE_NORMAL

  RINGER_MODE_SILENT

  RINGER_MODE_VIBRATE


  常量值: \"android.media.EXTRA_RINGER_MODE\"

  public static final String EXTRA_SCO_AUDIO_STATE

  额外的intent ACTION_SCO_AUDIO_STATE_CHANGED包含新的蓝牙SCO连接状态。


  常量值: \"android.media.extra.SCO_AUDIO_STATE\"

  public static final String EXTRA_VIBRATE_SETTING

  特定类型的新振动设置。


  参照

  VIBRATE_SETTING_CHANGED_ACTION

  EXTRA_VIBRATE_TYPE

  VIBRATE_SETTING_ON

  VIBRATE_SETTING_OFF

  VIBRATE_SETTING_ONLY_SILENT


  常量值: \"android.media.EXTRA_VIBRATE_SETTING\"

  public static final String EXTRA_VIBRATE_TYPE

  振动类型设置发生变化。


  参照

  VIBRATE_SETTING_CHANGED_ACTION

  VIBRATE_TYPE_NOTIFICATION VIBRATE_TYPE_RINGER 常量值: \"android.media.EXTRA_VIBRATE_TYPE\"


  public static final int FLAG_ALLOW_RINGER_MODES

  当改变音量时,是否将振铃模式作为候选项。例如,如果为true且音量级别为0音量或用ADJUST_LOWER调整音量,那么振铃模式会改变静音或振动

模式。

  对铃声流来说这个选项默认是打开的。如果包括这个标志,这个行为将被展示,不管流类型受振铃模式的影响。

  参照   adjustVolume(int, int)   adjustStreamVolume(int, int, int)

  常量值: 2 (0x00000002)   public static final int FLAG_PLAY_SOUND   当改变音量时,是否播放声音。   若由adjustVolume(int, int)或adjustSuggestedStreamVolume(int, int, int)给出,则在某些情况下会被忽略(例如,采用的流类型不是STREAM_RING,或正在向下调整音量)。

  参照   adjustStreamVolume(int, int, int)   adjustVolume(int, int)   setStreamVolume(int, int, int)

  常量值: 4 (0x00000004)   public static final int FLAG_REMOVE_SOUND_AND_VIBRATE   移除队列中或正在播放(与改变音量相关)的声音/振动。

  常量值: 8 (0x00000008)   public static final int FLAG_SHOW_UI   显示包含当前音量的toast。

  参照   adjustStreamVolume(int, int, int)   adjustVolume(int, int)   setStreamVolume(int, int, int)   setRingerMode(int)

  常量值: 1 (0x00000001)   public static final int FLAG_VIBRATE   若进入振动铃声模式是否振动。

  常量值: 16 (0x00000010)   public static final int FX_FOCUS_NAVIGATION_DOWN   焦点下移。

  参照   playSoundEffect(int)

  常量值: 2 (0x00000002)   public static final int FX_FOCUS_NAVIGATION_LEFT   焦点左移

  参照   playSoundEffect(int)

  常量值: 3 (0x00000003)   public static final int FX_FOCUS_NAVIGATION_RIGHT   焦点右移。

  参照   playSoundEffect(int)

  常量值: 4 (0x00000004)   public static final int FX_FOCUS_NAVIGATION_UP   焦点上移。

  参照   playSoundEffect(int)

  常量值: 1 (0x00000001)   public static final int FX_KEYPRESS_DELETE IME删除按键声音。

  参照   playSoundEffect(int)

  常量值: 7 (0x00000007)   public static final int FX_KEYPRESS_RETURN   IME返回按键声音。

  参照   playSoundEffect(int)

  常量值: 8 (0x00000008)   public static final int FX_KEYPRESS_SPACEBAR   IME空格按键声音。

  参照   playSoundEffect(int)

  常量值: 6 (0x00000006)   public static final int FX_KEYPRESS_STANDARD   IME标准按键声音。

  参照   playSoundEffect(int)

  常量值: 5 (0x00000005)   public static final int FX_KEY_CLICK   键盘和方向键点击声音。

  参照   playSoundEffect(int)   常量值: 0 (0x00000000)   public static final int MODE_CURRENT   当前音频模式。用来请求音频路由到当前模式。

  常量值: -1 (0xffffffff)   public static final int MODE_INVALID   无效的音频模式

  常量值: -2 (0xfffffffe)   public static final int MODE_IN_CALL   呼叫的音频模式。建立一个电话呼叫。

  常量值: 2 (0x00000002)   public static final int MODE_IN_COMMUNICATION   通信的音频模式。建立一个音频/视频或VoIP呼叫。

  常量值: 3 (0x00000003)   public static final int MODE_NORMAL   正常的音频模式:不是振铃或建立呼叫。

  常量值: 0 (0x00000000)   public static final int MODE_RINGTONE   振铃的音频模式。获取信号输入。

  常量值: 1 (0x00000001)   public static final int NUM_STREAMS   已弃用。   用 AudioSystem.getNumStreamTypes() 代替。

  常量值: 5 (0x00000005)   public static final String RINGER_MODE_CHANGED_ACTION   广播intent表明振铃模式被改变。包括新的振铃模式。

  参照 EXTRA_RINGER_MODE

常量值: \"android.media.RINGER_MODE_CHANGED\"   public static final int RINGER_MODE_NORMAL   振铃模式可以是听得见的或振动的。若音量在改变这一模式前是听得见的,则它是听得见的。若打开振动设置,则它是振动的。

  参照   setRingerMode(int)   getRingerMode()

  常量值: 2 (0x00000002)   public static final int RINGER_MODE_SILENT   振铃模式是静音且不振动。(这要覆盖振动设置。)

  参照   setRingerMode(int)   getRingerMode()

  常量值: 0 (0x00000000)   public static final int RINGER_MODE_VIBRATE   振铃模式是静音且振动。(这会导致电话铃声一直振动,但若设置当通知振动时振动)

  参照   setRingerMode(int)   getRingerMode()

  常量值: 1 (0x00000001)   public static final int ROUTE_ALL   已弃用。   不要直接设置音频路由,用方法setSpeakerphoneOn(), setBluetoothScoOn()代替。   用来屏蔽setRouting(int, int, int)的参数。

  常量值: -1 (0xffffffff)   public static final int ROUTE_BLUETOOTH   已弃用。   用ROUTE_BLUETOOTH_SCO。不要直接设置音频路由,用方法setSpeakerphoneOn(),   setBluetoothScoOn()代替。

  常量值: 4 (0x00000004)   public static final int ROUTE_BLUETOOTH_A2DP   已弃用。   不要直接设置音频路由,用方法setSpeakerphoneOn(), setBluetoothScoOn()代替。   路由音频输出到蓝牙A2DP。

  常量值: 16 (0x00000010)   public static final int ROUTE_BLUETOOTH_SCO   已弃用。   不要直接设置音频路由,用方法setSpeakerphoneOn(), setBluetoothScoOn()代替。   路由音频输出到蓝牙SCO。

  常量值: 4 (0x00000004)   public static final int ROUTE_EARPIECE   已弃用。   不要直接设置音频路由,用方法setSpeakerphoneOn(), setBluetoothScoOn()代替。   路由音频输出到听筒。

  常量值: 1 (0x00000001)   public static final int ROUTE_HEADSET   已弃用。   不要直接设置音频路由,用方法setSpeakerphoneOn(), setBluetoothScoOn()代替。   路由音频输出到耳机。

  常量值: 8 (0x00000008)   public static final int ROUTE_SPEAKER   已弃用。   不要直接设置音频路由,用方法setSpeakerphoneOn(), setBluetoothScoOn()代替。 路由音频输出到扬声器。

  常量值: 2 (0x00000002)   public static final int SCO_AUDIO_STATE_CONNECTED   EXTRA_SCO_AUDIO_STATE的额外值表明SCO音频通道已建立。

  常量值: 1 (0x00000001)   public static final int SCO_AUDIO_STATE_DISCONNECTED   EXTRA_SCO_AUDIO_STATE的额外值表明SCO音频通道未建立。

  常量值: 0 (0x00000000)   public static final int SCO_AUDIO_STATE_ERROR   EXTRA_SCO_AUDIO_STATE的额外值表明尝试获取状态有错误。

  常量值: -1 (0xffffffff)   public static final int STREAM_ALARM   用于报警的音频流。

  常量值: 4 (0x00000004)   public static final int STREAM_DTMF   用于DTMF Tones的音频流。

  常量值: 8 (0x00000008)   public static final int STREAM_MUSIC   用于音乐回放的音频流。

  常量值: 3 (0x00000003)   public static final int STREAM_NOTIFICATION   用于通知的音频流。

  常量值: 5 (0x00000005)   public static final int STREAM_RING   用于电话铃声的音频流。

  常量值: 2 (0x00000002)   public static final int STREAM_SYSTEM   用于系统声音的音频流。

  常量值: 1 (0x00000001)   public static final int STREAM_VOICE_CALL   用于电话的音频流。

  常量值: 0 (0x00000000)   public static final int USE_DEFAULT_STREAM_TYPE   建议使用默认的流类型。这可能不适用于所有需要流类型的地方。

  常量值: - (0x)   public static final String VIBRATE_SETTING_CHANGED_ACTION   广播intent,表明振动设置已改变。包括振动类型和其新设置。

  参照   EXTRA_VIBRATE_TYPE   EXTRA_VIBRATE_SETTING

  常量值: \"android.media.VIBRATE_SETTING_CHANGED\"   public static final int VIBRATE_SETTING_OFF   建议不振动的振动设置

  参照   setVibrateSetting(int, int)   getVibrateSetting(int)

  常量值: 0 (0x00000000)   public static final int VIBRATE_SETTING_ON 建议在合适时振动的振动设置。

  参照   setVibrateSetting(int, int)   getVibrateSetting(int)

  常量值: 1 (0x00000001)   public static final int VIBRATE_SETTING_ONLY_SILENT   建议只在振动铃声模式中振动的振动设置。

  参照   setVibrateSetting(int, int)   getVibrateSetting(int)

  常量值: 2 (0x00000002)   public static final int VIBRATE_TYPE_NOTIFICATION   与通知相符的振动类型。

  参照   setVibrateSetting(int, int)   getVibrateSetting(int)   shouldVibrate(int)

  常量值: 1 (0x00000001)   public static final int VIBRATE_TYPE_RINGER   与振铃相符的振动类型。

  参照   setVibrateSetting(int, int)   getVibrateSetting(int)   shouldVibrate(int)

  常量值: 0 (0x00000000)   公共方法   public int abandonAudioFocus (AudioManager.OnAudioFocusChangeListener l)   放弃音频焦点。若存在先前焦点拥有者,则使它接收焦点。

  参数   I 请求焦点的监听器。   返回值   AUDIOFOCUS_REQUEST_FAILED或 AUDIOFOCUS_REQUEST_GRANTED   public void adjustStreamVolume (int streamType, int direction, int flags)   通过同一方向的一步调整特定流的音量。   这个方法只能用于代替音频设置的平台范围管理应用程序或主要电话应用程序。

  参数   streamType 欲调整的流类型。值为STREAM_VOICE_CALL, STREAM_SYSTEM,   STREAM_RING, STREAM_MUSIC或STREAM_ALARM。   Direction 欲调整音量的方向。值为ADJUST_LOWER, ADJUST_RAISE, 或   ADJUST_SAME.   Flags 一个或多个标志。

  参照   adjustVolume(int, int)   setStreamVolume(int, int, int)   public void adjustSuggestedStreamVolume (int direction, int suggestedStreamType, int flags)   调整最相关流或给定的回放流的音量。   这个方法只能用于代替音频设置的平台范围管理应用程序或主要电话应用程序。

  参数   direction 欲调整音量的方向。值为 ADJUST_LOWER, ADJUST_RAISE,或 ADJUST_SAME.

  suggestedStreamType 若不存在相关流,则用该流类型。   USE_DEFAULT_STREAM_TYPE在这是有效的。   Flags 一个或多个标志。

  参照   adjustVolume(int, int) adjustStreamVolume(int, int, int) setStreamVolume(int, int, int) public void adjustVolume (int direction, int flags) 调整最相关流的音量。例如,若在通话中,不管通话屏幕是否显示,它都将拥有最高的   优先级。另一个例子,若音乐正在后台播放且不在通话中,刚将调整音频流。   这个方法只能用于代替音频设置的平台范围管理应用程序或主要电话应用程序。

  参数   direction 欲调整音量的方向。值为ADJUST_LOWER, ADJUST_RAISE, 或 ADJUST_SAME.   flags 一个或多个标志。

  参照   adjustSuggestedStreamVolume(int, int, int)   adjustStreamVolume(int, int, int)   setStreamVolume(int, int, int)

  public int getMode ()   返回当前的音频模式。   返回值   当前音频模式(MODE_NORMAL, MODE_RINGTONE, MODE_IN_CALL 或   MODE_IN_COMMUNICATION). 从HAL中返回当前音频状态。   public String getParameters (String keys)   获得音频硬件设置的参数值变量。

  参数   keys 参数列表

  返回值   键值对形式的参数列表: key1=value1;key2=value2;...

  public int getRingerMode ()   返回当前铃声模式。   返回值   当前铃声模式,值为RINGER_MODE_NORMAL, RINGER_MODE_SILENT, 或   RINGER_MODE_VIBRATE.

  参照   setRingerMode(int)   public int getRouting (int mode)   已弃用。   不要直接查询音频路由,用方法isSpeakerphoneOn(), isBluetoothScoOn(), isBluetoothA2dpOn() and isWiredHeadsetOn()代替。   返回指定模式的当前音频路由位向量。

  参数   mode 获取路由的音频模式 (e.g., MODE_RINGTONE)

  返回值   可以与ROUTE_xxx相比较的一个音频路由位向量   public int getStreamMaxVolume (int streamType)   返回特定流的最大音量索引。

  参数   streamType 返回最大音量索引的流类型。

  返回值   流的最大有效音量索引。

  参照   getStreamVolume(int)   public int getStreamVolume (int streamType)   返回特定类的当前音量索引。

  参数   streamType 返回音量索引的流类型。   返回值   The current volume index for the stream.   流的当前音量索引。

  参照   getStreamMaxVolume(int)   setStreamVolume(int, int, int) public int getVibrateSetting (int vibrateType) 返回振动类型对应的用户振动设置。   大多数需要振动的客户端不应该使用这个方法,用shouldVibrate(int)代替。

  参数   vibrateType 振动类型。值为VIBRATE_TYPE_NOTIFICATION或   VIBRATE_TYPE_RINGER。   返回值   振动设置,值为VIBRATE_SETTING_ON, VIBRATE_SETTING_OFF, 或   VIBRATE_SETTING_ONLY_SILENT.

  参照   setVibrateSetting(int, int)   shouldVibrate(int)   public boolean isBluetoothA2dpOn ()   检查A2DP音频路由到蓝牙耳机是否打开。

  返回值   true if A2DP audio is being routed to/from Bluetooth headset; false if otherwise   若A2DP音频被路由到/从蓝牙耳机,返回ture。反之,返回false。   public boolean isBluetoothScoAvailableOffCall ()   表明当前平台是否支持使用SCO关闭通话用例。当电话不在通话中,应用程序需要使用蓝牙SCO音频,必须先调用这个方法以确保平台支持这一特性。

  返回值  true if bluetooth SCO can be used for audio when not in call false otherwise   若当不在通话中时音频可以使用蓝牙SCO,返回ture。反之,返回false。   参照   startBluetoothSco()

  public boolean isBluetoothScoOn ()   检查通信是否使用蓝牙SCO。   返回值   若通信使用SCO,返回true。反之,返回false。

  public boolean isMicrophoneMute ()   检查麦克风是否静音。   返回值   若麦克风静音,返回true。反之,返回false。

  public boolean isMusicActive ()   检查是否有音乐是活动的。   返回值   若有音乐曲目是活动的,返回true。

  public boolean isSpeakerphoneOn ()   检查喇叭扩音器是否开着。   返回值   若喇叭扩音器开着,返回true。反之,返回false。

  public boolean isWiredHeadsetOn ()   检查音频路由到有线耳机是否开着。   返回值   若音频被路由到/从有线耳机,返回true。反之,返回false。

  public void loadSoundEffects ()   加载音效。当音效可用时,要先调用这个方法。

  public void playSoundEffect (int effectType, float volume)   播放音效(按键声音,打开/关闭盖子)   参数   effectType 音效的类型www.92apk.com。值为FX_KEY_CLICK, FX_FOCUS_NAVIGATION_UP,   FX_FOCUS_NAVIGATION_DOWN, FX_FOCUS_NAVIGATION_LEFT,   FX_FOCUS_NAVIGATION_RIGHT,FX_KEYPRESS_STANDARD,   FX_KEYPRESS_SPACEBAR,FX_KEYPRESS_DELETE, FX_KEYPRESS_RETURN。 Volume 音效的音量。音量值是原始标量so UI controls should be scaled logarithmically. 若音量指定为-1,用AudioManager.STREAM_MUSIC 流音量减去3dB。注意:这个版本应用于启动和控制音量面板的设置。

  public void playSoundEffect (int effectType)   播放音效(按键声音,打开/关闭盖子)   参数   effectType 音效的类型。值为FX_KEY_CLICK, FX_FOCUS_NAVIGATION_UP,   FX_FOCUS_NAVIGATION_DOWN, FX_FOCUS_NAVIGATION_LEFT,   FX_FOCUS_NAVIGATION_RIGHT, FX_KEYPRESS_STANDARD,   FX_KEYPRESS_SPACEBAR, FX_KEYPRESS_DELETE,   FX_KEYPRESS_RETURN,注意:这个版本使用UI设置决定声音能否被听见。

  public void registerMediaButtonEventReceiver (ComponentName eventReceiver)   注册一个组件,它是MEDIA_BUTTON intent的唯一接收器。   参数   eventReceiver 接收媒体按钮intent的BroadcastReceiver 的标志符。这个广播   接收器必须在应用程序清单中声明。

  public int requestAudioFocus (AudioManager.OnAudioFocusChangeListener l, intstreamType, int durationHint)   请求音频焦点。发送请求以获得音频焦点。   参数   l 音频焦点改变时通知的接收器。   streamType 受焦点请求影响的主要音频流类型。   durationHint 用AUDIOFOCUS_GAIN_TRANSIENT表示这个焦点请求是暂时的,很快会放弃这个焦点。暂时请求的例子有操纵方向的回放,通知声音。用AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK表示若先前焦点拥有者躲开它的音频输出,它保持播放是可行的。AUDIOFOCUS_GAIN用于一个求和持续时间的焦点请求,如回放歌曲或音频。   返回值   AUDIOFOCUS_REQUEST_FAILED或 AUDIOFOCUS_REQUEST_GRANTED

  public void setBluetoothA2dpOn (boolean on)   已弃用。   不要使用。   参数   on 若为true,路由A2DP音频到/从蓝牙耳机;若为false,禁用A2DP音频。

  public void setBluetoothScoOn (boolean on)   请求在通信中使用蓝牙SCO耳机。   这个方法只能用于代替音频设置的平台范围管理应用程序或主要电话应用程序。   参数   on 若为true,在通信中使用蓝牙SCO;若为false,不使用。

  public void setMicrophoneMute (boolean on)   设置麦克风是否静音。   这个方法只能用于代替音频设置的平台范围管理应用程序或主要电话应用程序。

  参数   on 若为ture,麦克风静音。若为flase,不静音。

  public void setMode (int mode)   设置音频模式。   音频模式包含音频路由和电话层的行为。因此,这个方法只能用于代替音频设置的平台范围管理应用程序或主要电话应用程序。特别地,MODE_IN_CALL模式只能用在当打电话时的电话程序中,因为它会引起信号从音频层馈入到平台混音器。   参数   mode 请求的音频模式(MODE_NORMAL, MODE_RINGTONE, MODE_IN_CALL   或MODE_IN_COMMUNICATION)。通知HAL当前的音频状态以便它能适当的路由音频。

  public void setParameters (String keyValuePairs)   给音频硬件设置一个可变数目的参数值。   参数   keyValuePairs 键值对形式的参数列表:key1=value1;key2=value2;...

  public void setRingerMode (int ringerMode)   设置铃声模式。   静音模式会静音且不会振动。振动模式会静音且会振动。正常模式是听得见的且根据用户设置决定是否振动。 参数 ringerMode 铃声模式。值为RINGER_MODE_NORMAL, RINGER_MODE_SILENT, or RINGER_MODE_VIBRATE.。   参照   getRingerMode()

  public void setRouting (int mode, int routes, int mask)   已弃用。   不要直接设置音频路由,用方法setSpeakerphoneOn(), setBluetoothScoOn()代替。   为特定模式设置音频路由。

  参数   mode 改变路由的音频模式。E.g., MODE_RINGTONE.   routes 请求路由的位向量,由一个或多个ROUTE_xxx类型创建。设置位表   明路由应该打开。   mask 改变路由位向量由一个或多个ROUTE_xxx类型创建复原位表明路由   应该不改变。

  public void setSpeakerphoneOn (boolean on)   设置喇叭扩音器打开或关闭。   这个方法只能用于代替音频设置的平台范围管理应用程序或主要电话应用程序。   参数   on 为true打开喇叭扩音器;为false关闭喇叭扩音器。

  public void setStreamMute (int streamType, boolean state)   静音或不静音音频流。   静音命令被保护以免客户端进程死亡:若具有流上的活动静音请求的进程死亡,这个流会自动取消静音。   对于给定的流,静音请求是累计的:AudioManager会从一个或多个客户端接收数个静音请求,只有当接收到相同数目的取消静音请求时流才会取消静音。   为了更好的用户体验,应该程序必须在onPause()中取消已静音流,若合适在onResume()中再次静音   这个方法只能用于代替音频设置的平台范围管理应用程序或主要电话应用程序。   参数   streamType 欲静音/取消静音的流。   state 请求静音状态:若为true,静音;若为false,取消静音。

  public void setStreamSolo (int streamType, boolean state)   单独的或不单独的一个特定类。其它流静音。   保护solo命令以免客户端进程死亡:若有在流上活动的solo请求的进程死亡,所有的流都被静音,因为这一请求被自动取消静音。   对给定类的solo请求是累计的:AudioManager会从一个或多个客户端接收数个solo请求,只有当接收到相同数目的unsoloed请求时流才会是unsoloed。   为了更好的用户体验,应该程序必须在onPause()中unsole a soloed 流,若合适在onResume()中再次solo。   参数   streamType soloed/unsolod的流。   state 请求的solo状态:solo打开为true,关闭为false。

  public void setStreamVolume (int streamType, int index, int flags)   设置特定流的音量索引。   参数   streamType 欲设置音量索引的流。   index 欲设置的音量索引。参照getStreamMaxVolume(int) 获得最大有效值。   flags 一个或多个标志。   参照   getStreamMaxVolume(int)   getStreamVolume(int)

  public void setVibrateSetting (int vibrateType, int vibrateSetting)   当振动类型应该振动时,设置配置。   这个方法只能用于代替音频设置的平台范围管理应用程序或主要电话应用程序。

  参数   vibrateType 振动类型。值为VIBRATE_TYPE_NOTIFICATION 或VIBRATE_TYPE_RINGER。   vibrateSetting 振动设置。值为VIBRATE_SETTING_ON, VIBRATE_SETTING_OFF,或VIBRATE_SETTING_ONLY_SILENT。

  参照   getVibrateSetting(int) shouldVibrate(int) public void setWiredHeadsetOn (boolean on) 已弃用。   不再使用。   设置打开或关闭音频路由到有线耳机。

  参数   on 为true,设置路由音频到/从有线耳机;为false,禁用有线耳机音频。

  public boolean shouldVibrate (int vibrateType)   根据用户的设置和当前铃声模式,返回一个特定类型是否应该振动。

  使用通知来振动的大多数客户端不应该使用这个方法。若策略不允许,通知管理器不会振动,故客户端常常设置振动模式且让通知管理器控制是否振动。

  参数   vibrateType 振动类型。值为VIBRATE_TYPE_NOTIFICATION或VIBRATE_TYPE_RINGER。

  返回值   在调用这个方法的瞬间,类型是否应该振动。

  参照   setVibrateSetting(int, int)   getVibrateSetting(int)

  public void startBluetoothSco ()   启动蓝牙SCO音频连接。

  需要权限:MODIFY_AUDIO_SETTINGS。

  当电话不在通话中,想发送/接收音频到/从蓝牙SCO耳机的应用程序可以使用这个方法。   由于SCO连接会花费几秒钟,应用程序不应该依赖方法返回的可用连接,而是注册接   收intent ACTION_SCO_AUDIO_STATE_CHANGED,并等待状态变为SCO_AUDIO_STATE_CONNECTED。   由于不保证连接成功,应用程序必须等待这个intent超时。   当完成SCO连接或建立超时,应用程序必须调用stopBluetoothSco()去清空请求并关闭蓝牙连接。   即使SCO连接已建立,下列限制应用在音频输出流以使他们被路由到SCO耳机:1.流类型必须是STREAM_VOICE_CALL 2.格式必须是mono 3.取样必须是16kH或8kHz。

  下列限制应用在输出流: 1.格式必须是mono2.取样必须是16kH或8kHz。   注意电话应用程序总是有使用SCO连接的优先权。当电话在通话中,调用这个方法会被忽略。类似,当应用程序正在使用SCO连接,若接听来电或呼叫发送,连接会丢失且不会在通话结束后自动返回。

  参照   stopBluetoothSco()   ACTION_SCO_AUDIO_STATE_CHANGED

  public void stopBluetoothSco ()   停止蓝牙SCO音频连接。

  需要权限:MODIFY_AUDIO_SETTINGS。

  应用程序用startBluetoothSco()请求使用蓝牙SCO音频,当应用程序完成SCO连接或建立时间超时,必须调用这个方法。   参照   startBluetoothSco()

  public void unloadSoundEffects ()   不加载音效。当音效被禁用时,调用这个方法释放一些内存。

public void unregisterMediaButtonEventReceiver (ComponentName eventReceiver)  

  移除注册MEDIA_BUTTON intent的接收器。

Android13 AudioManager setStreamVolume流程分析 比如在电话中,5种stream(STREAM_SYSTEM、STREAM_RING、STREAM_NOTIFICATION、STREAM_SYSTEM_ENFORCED、STREAM_DTMF)的alias都是STREAM_RING,那么对应的滑动条即可控制这5种stream的音量。各种stream的音量也可以单独设置、互不影响。Android的音量调节分3个部分,分别是master volume(硬件音量,控制声卡),stream volume(流音量)和track volume(app音量)。 阅读详情

相关推荐

android 之 AudioManager

直接影响音频路由(如听筒/扬声器切换)、电话行为及系统混音策略。值,系统自动切换音频输入/输出设备。)会激活基带芯片的音频通道,确保通话质量。普通应用滥用可能导致音频路由冲突。当电话接入时,媒体应用应主动切换至。并暂停播放,避免混音。

aningxiaoxixi的博客 854

【Android】Audio音频输出通道切换 - 蓝牙、外放

手机音频的输出有外放(Speaker)、听筒(Telephone Receiver)、有线耳机(WiredHeadset)、蓝牙音箱(Bluetooth A2DP)等输出设备。在平时,电话免提、插拔耳机、连接断开蓝牙设备等操作系统都会自动切换Audio音频到相应的输出设备上。比如电话免提就是从听筒切换到外放扬声器,插入耳机就是从外放切换到耳机。场景需求Android系统自动切换的这些策略,并不能全部

Mlib 2万+

android之声音管理器AudioManager的使用

Android声音管理AudioManager使用手机都有声音模式,声音、静音还有震动,甚至震动加声音兼备,这些都是手机的基本功能。在Android手机中,我们同样可以通过Android的SDK提供的声音管理接口来管理手机声音模式以及调整声音大小,这就是Android中AudioManager的使用。以下分别是AudioManager设置声音模式和调整声音大小的方法。如何获取声音管理器:AudioManager audioManager = (AudioManager) this.getSystemServ

梦中一夜下江南 2万+

android setbluetootha2dpon,On android how to reroute audio from a2dp

I have a Samsung vibrant and I am connecting to to my car using bluetooth. In the samsung music app there is a button to route the audio to via bluetooth or via phone.Anyone know how there were able c...

weixin_42097450的博客 369

全志V3S开发板实战:从零构建嵌入式Linux系统

本文提供了一份针对全志V3S开发板(如LicheePi Zero)的零基础教程,详细指导如何从零开始构建嵌入式Linux系统。内容涵盖编译环境搭建、交叉工具链配置、U-Boot引导程序编译与烧录、Linux内核定制与编译,以及使用Buildroot构建根文件系统,最终实现系统成功启动,帮助开发者深入理解嵌入式系统构建全流程。

tensor9flow的博客 575

使用网分对晶体ESR/L1/C1/C0进行测量计算

Use R&S Vector Network Analyzer test XTAL ESR/L1/C1/C0 測量方法:使用儀器的Port1端口,測量XTAL的S11,通過諧振的參數計算出ESR/L1/C1/C0的值。 實際晶體的等效模型:通常方便晶體分析,使用下圖(b)的等效模型,但實際測量發現晶體存在多個串聯諧振點,實際等效模型更接近(c)。 儀器測量到的S11,其中M...

qq_39138630的博客 2086

android AudioManager AUDIOFOCUS

如今開始做音乐播放器的模块。遇到了几个问题 当播放音乐的过程中,去调节音量或者情景模式中的铃声设置,结果会有两种声音同一时候响起。引起此问题的解决办法是音乐焦点问题没弄清 现分析一下音乐焦点的几个属性:源代码在frameworks/base/media/java/andorid/media/AudioManager.java中 public static final int ...

weixin_33755557的博客 184

ZYNQ专题-7020驱动KSZ9031 PHY芯片

之所以有这篇文章,得益于Alinx的开发板。

Anitawen的博客 4969

Android多媒体分析(四)AudioManager

AudioManage 管理控制声音 继承关系 publicclassAudioManagerextendsObject java.lang.Object android.media.AudioManager 类概述 AudioManager类提供访问音量和振铃模式的控制。 用Context.getSystemService(Context.AU...

weixin_30316097的博客 346

【C2000系列DSP的Bootloader详解】如何利用脚本自动合并Bin文件

本文通过OutconvertBin.py实现了 C2000 Bootloader+UserApp 的「ELF 转 BIN+BIN 合并」全流程自动化,核心优势如下: 架构适配:严格遵循 C28x 16 位大端格式,生成的 BIN 文件可直接烧录; 自动化程度高:一键完成清理、转换、合并,无需手动执行多个命令; 可追溯性:生成 CRC32 校验值,便于验证文件完整性; 量产友好:合并后的merged.bin支持一次性烧录,提升量产效率。

昔时扬尘处 183

优快云专栏限时活动!福利公告必读!

本人优快云付费专栏周排名27名专业博主,每周文章平均阅读量约7w以上!

FJN110的博客 3154

android 关闭和打开Speaker

private int currVolume = 0;          /**      * 打开扬声器      */     private void openSpeaker() {         try{             AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO

nosxcy的专栏 6095

ransac拟合2D圆(三点定圆 c++详细版)

RANSAC(Random Sample Consensus,随机采样一致性)算法是一种基于随机采样的迭代算法,主要用于从一组包含大量噪声和异常值(外点)的数据中估计数学模型的参数。

twnkie的博客 1047

安卓声音管理器AudioManager的使用

AudioManager是安卓sdk提供的声音管理接口,可以通过此接口管理手机声音模式声音、震动、静音等模式切换,也可以调节音量大小。 首先要获取声音管理器: AudioManager audioService = (AudioManager) getSystemService(AUDIO_SERVICE); 1.设置声音模式    //声音模式   AudioManager

kochenmiao的博客 1226

【K8S系列】Kubernetes 中 Service 的流量不均匀问题【已解决】

在 Kubernetes 中,Service 是一种抽象,用于定义一组 Pod 的访问策略。当某些 Pod 接收的流量过多,而其他 Pod 的流量较少时,可能会导致负载不均衡。这种情况不仅影响性能,还可能导致某些 Pod 过载,影响应用的可用性。本文将详细分析此问题的原因及其解决方案。

颜淡慕潇 8740

高性能优化的本质

在很早之前,处理器性能的提升一般是通过减小元器件的尺寸,增加元器件的数量,提高主频来实现,这也是摩尔定律所说的,但是由于功耗的影响,主频不能一直增加。后来,由于英伟达的GPU的并行计算的出现,逐渐打破摩尔定律,人们利用多核,SIMD,SIMT来处理大量相同计算的数据,这极大的提高了效率。计算机的算力得到了巨大的提升,但是并行是困难的,对于有数据依赖的程序来说,处理并行是一件及其困难的事,但对于一些简单的数学库的计算,并行的实现相对简单。

发狂的小花的博客 274

Android AudioManager详解

转至:http://www.cnblogs.com/over140/archive/2011/08/07/2130393.html 前言   本章内容是android.media.AudioManager,版本为Android 3.2 r1,翻译来自"文炜",欢迎访问他的博客:"http://www.cnblogs.com/iezhyg/",再次感谢"文炜"!欢迎你一起参与A...

u010121512的专栏 2742

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android AudioManager探索

AudioManager不陌生吧,你要设置音量、静音都要用到它,有时会遇到两个应用的音频重叠播放,就是因为没做好处理。。。 文章目录一、常用方法1、 音量2、获取焦点(处理声音重叠问题)二、代码示例 一、常用方法 初始化: AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); Au...

无名的一棵小树 2019

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

android audioManager的简单使用

package org.shadow.testcustomvplayer; import android.app.Service; import android.media.AudioManager; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.ap

Infatuationer的博客 672

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Android AudioManager类

1. AudioManager类 AudioManager是音频管理器,提供了音量控制与铃声模式相关操作。 AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE); 2. 主要方法 adjustVolume(int direction, int flags), 控制手机音量,调大或者调小一个单位 ...

假装你是大灰狼的专栏 1968

android AudioManager类 详解

AudioManager类位于android.Media 包中,该类提供访问控制音量和钤声模式的操作。 通过getSystemService(Context.AUDIO_SERVICE)方法获得AudioManager实例对象。 AudioManager audiomanage = (AudioManager)context.getSystemService(Context.AUDIO_S

leirenorlei的专栏 4万+

audiomanager.java,android系统之AudioManager

AudioManager类位于android.Media包中,该类提供访问控制音量和钤声模式的操作。通过getSystemService(Context.AUDIO_SERVICE)方法获得AudioManager实例对象。AudioManager audiomanage =(AudioManager)context.getSystemService(Context.AUDIO_SERVICE);...

weixin_26897585的博客 754

Android10.0AudioManager之getDevices(二)

前言 Android10.0AudioManager之getDevices(一)我们分析了获取Audioport以及AudioPatch的过程,今天继续 正文

l328873524的博客 3206
上一篇: 可延迟函数、内核微线程以及工作队列
下一篇: Android消息队列模型——Thread,Handler,Looper,Massage Queue
fdaopeng
博客等级 码龄18年 25粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值