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