android电话接通状态下,关机铃声无法从外放输出

时间:2023-03-09 02:40:08
android电话接通状态下,关机铃声无法从外放输出

AudioMTKPolicyManager.cpp的startOutput方法中。将在newDevic获取到的后面加入:

if(stream==AudioSystem::BOOT)newDevice|=AUDIO_DEVICE_OUT_SPEAKER;

 

status_t AudioMTKPolicyManager::startOutput(audio_io_handle_t output,

                                             AudioSystem::stream_type stream,

                                             int session)

{

    ALOGD("startOutput() output %d, stream %d, session %d", output, stream, session);

    ......

    if (outputDesc->mRefCount[stream] == 1) {

        audio_devices_t newDevice = getNewDevice(output, false /*fromCache*/);

        routing_strategy strategy = getStrategy(stream);

        bool shouldWait = (strategy == STRATEGY_SONIFICATION) ||

                            (strategy == STRATEGY_SONIFICATION_RESPECTFUL);

        uint32_t waitMs = 0;

        bool force = false;

        if(stream==AudioSystem::BOOT) newDevice|=AUDIO_DEVICE_OUT_SPEAKER;

        for (size_t i = 0; i < mOutputs.size(); i++) {

            AudioOutputDescriptor *desc = mOutputs.valueAt(i);

            if (desc != outputDesc) {

                // force a device change if any other output is managed by the same hw

                // module and has a current device selection that differs from selected device.

                // In this case, the audio HAL must receive the new device selection so that it can

                // change the device currently selected by the other active output.

                if (outputDesc->sharesHwModuleWith(desc) &&

                    desc->device() != newDevice) {

                    force = true;

                }

                // wait for audio on other active outputs to be presented when starting

                // a notification so that audio focus effect can propagate.

                uint32_t latency = desc->latency();

                if (shouldWait && desc->isActive(latency * 2) && (waitMs < latency)) {

                    waitMs = latency;

                }

            }

        }

      ......      

    }

    return NO_ERROR;

}