Android 如何设置外部扬声器的声音播放?

Android 如何设置外部扬声器的声音播放?,android,kotlin,Android,Kotlin,有一个奇怪的问题,我用双簧管来播放声音。当然,您可以根据android设置选择声音播放输出 所以,如果我需要设置精确的输出香奈儿,我需要将其设置为双簧管lib 顺便说一句,我需要的输出通道是类型的内置扬声器,但在某些设备上(有时,不是经常),我可以听到 类型内置耳机 我是如何做到这一点的,我有这样的方法来获得所需的香奈儿身份证 fun findAudioDevice(app: Application, deviceFlag: Int,

有一个奇怪的问题,我用双簧管来播放声音。当然,您可以根据android设置选择声音播放输出

所以,如果我需要设置精确的输出香奈儿,我需要将其设置为双簧管lib

顺便说一句,我需要的输出通道是
类型的内置扬声器
,但在某些设备上(有时,不是经常),我可以听到
类型内置耳机

我是如何做到这一点的,我有这样的方法来获得所需的香奈儿身份证

fun findAudioDevice(app: Application,
                            deviceFlag: Int,
                            deviceType: Int): AudioDeviceInfo?
        {
            var result: AudioDeviceInfo? = null
            val manager = app.getSystemService(Context.AUDIO_SERVICE) as AudioManager
            val adis = manager.getDevices(deviceFlag)

            for (adi in adis)
            {
                if (adi.type == deviceType)
                {
                    result = adi
                    break
                }
            }

            return result
        }
我如何使用它

val id = getAudioDeviceInfoId(getBuildInSpeakerInfo())

private fun getBuildInSpeakerInfo(): AudioDeviceInfo?
    {
        return com.tetavi.ar.basedomain.utils.Utils.findAudioDevice( //
                getApplication<Application>(), //
                AudioManager.GET_DEVICES_OUTPUTS, //
                AudioDeviceInfo.TYPE_BUILTIN_SPEAKER //
        )
    }

private fun getAudioDeviceInfoId(info: AudioDeviceInfo?): Int
    {
        var result = -1

        if (info != null)
        {
            result = info.id
        }

        return result
    }
所以,实际上问题是,在一些设备上(有时,不是经常),我仍然听到声音从内部扬声器
TYPE\u BUILTIN\u耳机
播放,尽管我直接设置了需要使用
TYPE\u BUILTIN\u扬声器

从我得到这个
id
(它实际上是3)的那一刻起,直到我将它设置为
oboe
lib的参数为止,我检查了几次流,但有时我仍然会听到内部扬声器的声音

所以,问题是——如果我错过了什么?也许应该实施一些技巧或其他什么

oboe::Result oboe_engine::createPlaybackStream()
{
    oboe::AudioStreamBuilder builder;
    const oboe::SharingMode sharingMode = oboe::SharingMode::Exclusive;
    const int32_t sampleRate = mBackingTrack->getSampleRate();
    const oboe::AudioFormat audioFormat = oboe::AudioFormat::Float;
    const oboe::PerformanceMode performanceMode = oboe::PerformanceMode::PowerSaving;

    builder.setSharingMode(sharingMode)
            ->setPerformanceMode(performanceMode)
            ->setFormat(audioFormat)
            ->setCallback(this)
            ->setSampleRate(sampleRate);

    if (m_output_playback_chanel_id != EMPTY_NUM)
    {
        //set output playback chanel (like internal or external speaker)
        builder.setDeviceId(m_output_playback_chanel_id);                  <------------- THIS LINE
    }

    return builder.openStream(&mAudioStream);
}