问题描述
我正在使用Flutter开发一个应用程序,我只想通过耳机或顶部扬声器(用于通话的声音)发出声音。目前它同时使用大扬声器和耳机,但我想更改它,以便仅在连接耳机时才能收听。我当前用于流式传输和播放音频的程序包是https://pub.dev/packages/sound_stream。
这是初始化播放器的代码:
private fun initializePlayer(@NonNull call: MethodCall,@NonNull result: Result) {
mPlayerSampleRate = call.argument<Int>("sampleRate") ?: mPlayerSampleRate
debugLogging = call.argument<Boolean>("showLogs") ?: false
mPlayerFormat = AudioFormat.Builder()
.setEncoding(AudioFormat.ENCODING_PCM_16BIT)
.setChannelMask(AudioFormat.CHANNEL_OUT_MONO)
.setSampleRate(mPlayerSampleRate)
.build()
mPlayerBufferSize = AudioTrack.getMinBufferSize(mPlayerSampleRate,AudioFormat.CHANNEL_OUT_MONO,AudioFormat.ENCODING_PCM_16BIT)
if (mAudioTrack?.state == AudioTrack.STATE_INITIALIZED) {
mAudioTrack?.release()
}
/*
// I have tried with different examples but they don't work
var value = this.pluginContext?.getSystemService(Context.AUdio_SERVICE) as AudioManager
//For phone ear piece
value.mode = AudioManager.MODE_IN_COMMUNICATION;
value.stopBluetoothSco();
value.isBluetoothScoOn = false;
value.isspeakerphoneOn = false;
//For BT
value.setMode(AudioManager.MODE_IN_COMMUNICATION);
value.startBluetoothSco();
value.setBluetoothScoOn(true);
//For phone speaker(loadspeaker)
value.setMode(AudioManager.MODE_norMAL);
value.stopBluetoothSco();
value.setBluetoothScoOn(false);
value.setSpeakerphoneOn(true);
*/
val audioAttributes = AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.setUsage(AudioAttributes.USAGE_MEDIA)
.setFlags(AudioAttributes.FLAG_AUDIBILITY_ENFORCED)
.build()
mAudioTrack = AudioTrack(audioAttributes,mPlayerFormat,mPlayerBufferSize,AudioTrack.MODE_STREAM,AudioManager.AUdio_SESSION_ID_GENERATE)
result.success(true)
sendplayerStatus(SoundStreamStatus.Initialized)
}
private fun startPlayer(result: Result) {
try {
if (mAudioTrack?.state == AudioTrack.PLAYSTATE_PLAYING) {
result.success(true)
return
}
var value = this.pluginContext!!.getSystemService(Context.AUdio_SERVICE) as AudioManager
if(value.isWiredHeadseton()){
mAudioTrack!!.play()
}
sendplayerStatus(SoundStreamStatus.Playing)
result.success(true)
} catch (e: Exception) {
result.error(SoundStreamErrors.FailedToPlay.name,"Failed to start Player",e.localizedMessage)
}
}
该代码在kotlin的Android部分中使用。
谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)