AudioSession

概述

AVAudioSession

音频输出作为硬件资源,对于iOS系统来说是唯一的,那么要如何协调和各个App之间对这个稀缺的硬件持有关系呢? iOS给出的解决方案是"AVAudioSession" ,通过它可以实现对App当前上下文音频资源的控制,比如 插拔耳机、接电话、是否和其他音频数据混音等。当你遇到:

  • 是进行录音还是播放?
  • 当系统静音键按下时该如何表现?
  • 是从扬声器还是从听筒里面播放声音?
  • 插拔耳机后如何表现?
  • 来电话/闹钟响了后如何表现?
  • 其他音频App启动后如何表现?
  • ...

这些场景的时候,就可以考虑一下“AVAudioSession”了。

详情参考 简书技术博客

原生插件接口

setAudioSessionActive

激活 AVAudioSession

setAudioSessionActive({params},callback(ret, err))

params

active:

  • 类型:布尔
  • 描述:(可选项)是否激活
  • 默认:true

options:

  • 类型:数组
  • 描述:(可选项)配置选项
  • 取值范围:
    • AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation

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 及更高版本

是否仍需要帮助? 请保持联络!
最后更新于 2024/04/24