AudioSession
概述
AVAudioSession
音频输出作为硬件资源,对于iOS系统来说是唯一的,那么要如何协调和各个App之间对这个稀缺的硬件持有关系呢? iOS给出的解决方案是"AVAudioSession" ,通过它可以实现对App当前上下文音频资源的控制,比如 插拔耳机、接电话、是否和其他音频数据混音等。当你遇到:
- 是进行录音还是播放?
- 当系统静音键按下时该如何表现?
- 是从扬声器还是从听筒里面播放声音?
- 插拔耳机后如何表现?
- 来电话/闹钟响了后如何表现?
- 其他音频App启动后如何表现?
- ...
这些场景的时候,就可以考虑一下“AVAudioSession”了。
详情参考 简书技术博客。
模块接口
setAudioSessionActive
激活 AVAudioSession
setAudioSessionActive({params},callback(ret, err))
params
active:
- 类型:布尔
- 描述:(可选项)是否激活
- 默认:true
callback(ret, err)
ret:
- 类型:JSON 对象
- 内部字段:
{
status: true //布尔型;true||false,是否激活成功
}
err:
- 类型:JSON 对象
- 内部字段:
{
code: 0, //数字类型;错误码
msg:'' //字符串类型;错误信息
}
示例代码
var AudioSession = api.require('AudioSession');
AudioSession.setAudioSessionActive(function(ret, err) {
if (ret.status) {
api.alert({msg:JSON.stringify(ret)});
} else {
api.alert({msg:JSON.stringify(err)});
}
});
可用性
iOS 系统
可提供的 1.0.0 及更高版本
getAudioSessionCategory
获取当前 seesion 的 category
getAudioSessionCategory(callback(ret))
callback(ret)
ret:
- 类型:JSON 对象
- 内部字段:
{
currentCategory:'' //字符串类型;当前category
}
示例代码
var AudioSession = api.require('AudioSession');
AudioSession.getAudioSessionCategory(function(ret) {
api.alert({msg:JSON.stringify(ret)});
});
可用性
iOS 系统
可提供的 1.0.0 及更高版本
availableCategories
获取当前设备支持的 category
availableCategories(callback())
callback()
- 类型:JSON对象
- 描述:获取的category
- 内部字段:
{
availableCategories: //JSON数组;当前设备支持的category组成的数组
}
示例代码
var AudioSession = api.require('AudioSession');
AudioSession.availableCategories(function(ret) {
api.alert({msg:JSON.stringify(ret)});
});
可用性
iOS 系统
可提供的 1.0.0 及更高版本
availableModes
获取当前设备支持的 modes
availableModes(callback())
callback()
- 类型:JSON对象
- 描述:获取的category
- 内部字段:
{
availableModes: //JSON数组;当前设备支持的mode组成的数组
}
示例代码
var AudioSession = api.require('AudioSession');
AudioSession.availableModes(function(ret) {
api.alert({msg:JSON.stringify(ret)});
});
可用性
iOS 系统
可提供的 1.0.0 及更高版本
setAudioSessionCategory
设置 AVAudioSession 的 category
setAudioSessionCategory({params},callback(ret, err))
params
category:
- 类型:字符串
- 描述:要设置的 category
options:
- 类型:数组
- 描述:要设置的 category 的选项
- 取值范围:
- AVAudioSessionCategoryOptionMixWithOthers
- AVAudioSessionCategoryOptionDuckOthers
- AVAudioSessionCategoryOptionAllowBluetooth
- AVAudioSessionCategoryOptionDefaultToSpeaker
- AVAudioSessionCategoryOptionInterruptSpokenAudioAndMixWithOthers
- AVAudioSessionCategoryOptionAllowBluetoothA2DP
- AVAudioSessionCategoryOptionAllowAirPlay
callback(ret, err)
ret:
- 类型:JSON 对象
- 内部字段:
{
status: true //布尔型;true||false,是否设置成功
}
err:
- 类型:JSON 对象
- 内部字段:
{
code: 0, //数字类型;错误码
msg:'' //字符串类型;错误信息
}
示例代码
var AudioSession = api.require('AudioSession');
AudioSession.setAudioSessionCategory({
category:'AVAudioSessionCategoryAmbient',
options:['AVAudioSessionCategoryOptionMixWithOthers','AVAudioSessionCategoryOptionDuckOthers','AVAudioSessionCategoryOptionAllowBluetooth']
},function(ret, err) {
if (ret.status) {
api.alert({msg:JSON.stringify(ret)});
} else {
api.alert({msg:JSON.stringify(err)});
}
});
可用性
iOS 系统
可提供的 1.0.0 及更高版本
setAudioSessionMode
设置 AVAudioSession 的 mode
setAudioSessionMode({params},callback(ret, err))
params
mode:
- 类型:字符串
- 描述:要设置的 mode
callback(ret, err)
ret:
- 类型:JSON 对象
- 内部字段:
{
status: true //布尔型;true||false,是否设置成功
}
err:
- 类型:JSON 对象
- 内部字段:
{
code: 0, //数字类型;错误码
msg:'' //字符串类型;错误信息
}
示例代码
var AudioSession = api.require('AudioSession');
AudioSession.setAudioSessionMode({
mode:'AVAudioSessionModeVoiceChat'
},function(ret, err) {
if (ret.status) {
api.alert({msg:JSON.stringify(ret)});
} else {
api.alert({msg:JSON.stringify(err)});
}
});
可用性
iOS 系统
可提供的 1.0.0 及更高版本