gpt4 book ai didi

android - AudioManager.requestAudioFocus on Lollipop 及更高版本

转载 作者:太空狗 更新时间:2023-10-29 13:46:36 26 4
gpt4 key购买 nike

我目前正在为一个培训应用程序实现 AudioHelper,它可以在您的培训类(class)中播放一些励志演讲。所以基本上,如果正在进行演讲,我想避开我的 spotify 音频,以便清楚地听到演讲。对于 Kitkat 和 Oreo(及更高版本),我可以正常工作(请参阅代码)。但是对于 Lollipop 我找不到合适的实现。在 developer.android.com 他们写道:

For apps that target Android 5.0 (API level 21) and later, audio apps should use AudioAttributes to describe the type of audio your app is playing. For example, apps that play speech should specify CONTENT_TYPE_SPEECH. source

但是我该从哪里开始,我需要什么才能获得与 kitkat 和 oreo 相同的结果? (AudioFocusRequest.Builder() 在 API 21 到 API 26 之前尚不可用。)

这是我的代码 fragment :

/** Apps running Android 8.0 (API level 26) or greater should use the requestAudioFocus() method,
* which takes an AudioFocusRequest parameter. The AudioFocusRequest contains information about
* the audio context and capabilities of your app. The system uses this information to manage
* the gain and loss of audio focus automatically.
*/
@RequiresApi(Build.VERSION_CODES.O)
private fun loadAndPlayAudioForOreoAndHigher() {
val audioAttributes = AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_NOTIFICATION)
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
.build()

val audioFocusRequest = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK).run {
setAudioAttributes(audioAttributes)
setAcceptsDelayedFocusGain(true)
setOnAudioFocusChangeListener(MediaHelper)
build()
}

val focusRequest = audioManager.requestAudioFocus(audioFocusRequest)
if(focusRequest == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
mediaPlayer.setOnCompletionListener { audioManager.abandonAudioFocusRequest(audioFocusRequest) }
mediaPlayer.start()
}
}

/**
* For apps that target Android 5.0 (API level 21) and later, audio apps should use
* AudioAttributes to describe the type of audio your app is playing. For example,
* apps that play speech should specify CONTENT_TYPE_SPEECH.
*/
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
private fun loadAndPlayAudioForLollipopAndHigher() {
// TODO implement audioFocusRequest() and abandonAudioFocusRequest()
}

/**
* Beginning with Android 2.2 (API level 8), apps manage audio focus by calling
* requestAudioFocus() and abandonAudioFocus(). Apps must also register an
* AudioManager.OnAudioFocusChangeListener with both calls in order to receive callbacks
* and manage their own audio level.
*/
@Suppress("DEPRECATION")
@RequiresApi(Build.VERSION_CODES.KITKAT)
private fun loadAndPlayAudioForKitkatAndHigher() {
val focusRequestResult = audioManager.requestAudioFocus(this, AudioManager.STREAM_NOTIFICATION, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK)
if(focusRequestResult == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
mediaPlayer.setOnCompletionListener { audioManager.abandonAudioFocus(this) }
mediaPlayer.start()
}
}

最佳答案

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
videoView.setAudioFocusRequest(AudioManager.AUDIOFOCUS_NONE);
} else {
AudioManager audioManager = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE);
audioManager.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);
}

关于android - AudioManager.requestAudioFocus on Lollipop 及更高版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52973784/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com