fix(audio): kickReleaseMedia mit 250ms Pause zwischen request+abandon — Spotify kriegt den Focus-Wechsel sonst gar nicht mit
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -148,6 +148,11 @@ class AudioFocusModule(reactContext: ReactApplicationContext) : ReactContextBase
|
|||||||
promise.resolve(false)
|
promise.resolve(false)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
// Async laufen lassen — wir wollen einen request, Pause, dann abandon.
|
||||||
|
// Ohne Pause merkt das System (und damit Spotify) die kurze Owner-
|
||||||
|
// Wechsel oft gar nicht. 250ms reicht erfahrungsgemaess fuer den
|
||||||
|
// Focus-Stack-Refresh.
|
||||||
|
Thread {
|
||||||
try {
|
try {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
val attrs = AudioAttributes.Builder()
|
val attrs = AudioAttributes.Builder()
|
||||||
@@ -160,21 +165,22 @@ class AudioFocusModule(reactContext: ReactApplicationContext) : ReactContextBase
|
|||||||
.setOnAudioFocusChangeListener(kickListener)
|
.setOnAudioFocusChangeListener(kickListener)
|
||||||
.build()
|
.build()
|
||||||
am.requestAudioFocus(kickReq)
|
am.requestAudioFocus(kickReq)
|
||||||
|
Thread.sleep(250)
|
||||||
am.abandonAudioFocusRequest(kickReq)
|
am.abandonAudioFocusRequest(kickReq)
|
||||||
} else {
|
} else {
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
val kickListener = AudioManager.OnAudioFocusChangeListener { /* ignorieren */ }
|
val kickListener = AudioManager.OnAudioFocusChangeListener { /* ignorieren */ }
|
||||||
@Suppress("DEPRECATION")
|
@Suppress("DEPRECATION")
|
||||||
am.requestAudioFocus(kickListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN)
|
am.requestAudioFocus(kickListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN)
|
||||||
|
Thread.sleep(250)
|
||||||
@Suppress("DEPRECATION")
|
@Suppress("DEPRECATION")
|
||||||
am.abandonAudioFocus(kickListener)
|
am.abandonAudioFocus(kickListener)
|
||||||
}
|
}
|
||||||
Log.i(TAG, "kickReleaseMedia: USAGE_MEDIA-Stack aufgemischt")
|
Log.i(TAG, "kickReleaseMedia: USAGE_MEDIA-Stack aufgemischt (250ms Pause)")
|
||||||
promise.resolve(true)
|
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Log.w(TAG, "kickReleaseMedia failed: ${e.message}")
|
Log.w(TAG, "kickReleaseMedia failed: ${e.message}")
|
||||||
promise.resolve(false)
|
|
||||||
}
|
}
|
||||||
|
}.start()
|
||||||
|
promise.resolve(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun release() {
|
private fun release() {
|
||||||
|
|||||||
Reference in New Issue
Block a user