AudioService.JAVA
setBluetoothScoOn(boolean on)
AudioSystem.setForceUse(AudioSystem.FOR_RECORD, mForcedUseForComm);
{"setForceUse", "(II)I", (void *)android_media_AudioSystem_setForceUse},
status_t AudioSystem::setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config)
void AudioPolicyManagerBase::setForceUse(AudioSystem::force_use usage, AudioSystem::forced_config config)
比较重要的函数
audio_devices_t AudioPolicyManagerBase::getDeviceForInputSource(int inputSource)
-------------------------------
AudioPolicyManager, AudopolicyManagerBase
getDeviceForStrategy
audio_devices_t AudioPolicyManagerBase::getDeviceForStrategy(routing_strategy strategy,
bool fromCache)
打开SCO的方式
atResponseCodeNative(HeadsetHalConstants.AT_RESPONSE_OK, 0);
phoneStateChangeNative(callState.mNumActive, callState.mNumHeld,
callState.mCallState, callState.mNumber, callState.mType)
--------------------------------------
void AudioPolicyManagerBase::checkA2dpSuspend()
{
if (!mHasA2dp) {
return;
}
audio_io_handle_t a2dpOutput = getA2dpOutput();
if (a2dpOutput == 0) {
return;
}
// suspend A2DP output if:
// (NOT already suspended) &&
// ((SCO device is connected &&
// (forced usage for communication || for record is SCO))) ||
// (phone state is ringing || in call)
//
// restore A2DP output if:
// (Already suspended) &&
// ((SCO device is NOT connected ||
// (forced usage NOT for communication && NOT for record is SCO))) &&
// (phone state is NOT ringing && NOT in call)
//
if (mA2dpSuspended) {
if (((mScoDeviceAddress == "") ||
((mForceUse[AudioSystem::FOR_COMMUNICATION] != AudioSystem::FORCE_BT_SCO) &&
(mForceUse[AudioSystem::FOR_RECORD] != AudioSystem::FORCE_BT_SCO))) &&
((mPhoneState != AudioSystem::MODE_IN_CALL) &&
(mPhoneState != AudioSystem::MODE_RINGTONE))) {
mpClientInterface->restoreOutput(a2dpOutput);
mA2dpSuspended = false;
}
} else {
if (((mScoDeviceAddress != "") &&
((mForceUse[AudioSystem::FOR_COMMUNICATION] == AudioSystem::FORCE_BT_SCO) ||
(mForceUse[AudioSystem::FOR_RECORD] == AudioSystem::FORCE_BT_SCO))) ||
((mPhoneState == AudioSystem::MODE_IN_CALL) ||
(mPhoneState == AudioSystem::MODE_RINGTONE))) {
mpClientInterface->suspendOutput(a2dpOutput);
mA2dpSuspended = true;
}
}
}