AudioManager.OnAudioFocusChangeListener() 在 Kotlin 中的 AudioManager.AUDIOFOCUS_LOSS 之后不起作用

问题描述 投票:0回答:0

当另一个音乐播放器正在播放时,我尝试制作音乐播放器服务,我的应用程序的播放器已暂停。如果另一个音乐播放器暂停或停止,则正在播放来自我的应用程序的音乐。当 AudioManager.OnAudioFocusChangeListener() 中的 focusChange 为 -1 或者你可以说它是 AudioManager.AUDIOFOCUS_LOSS 时,我用另一个音乐应用程序的音频中断了我的音乐应用程序的音频,AudioManager.OnAudioFocusChangeListener() 不再工作,我无法制作音频当来自另一个应用程序的另一个音频正在运行并且他们正在一起播放音频时,来自我的应用程序再次暂停。

这是我的代码

buildNotificationChannel()
registerReceiver(broadcastReceiver, IntentFilter("Tracks"))

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
    this.startForegroundService(Intent(baseContext, StartMusicPlayerService::class.java))
}
else
{
    startService(Intent(baseContext, StartMusicPlayerService::class.java))
}

首先,这是一个 MainActivity 类代码,它导致 StartMusicPlayerService 类在 onCreate() 中包含 AudioManager.OnAudioFocusChangeListener()

override fun onCreate()
{
    super.onCreate()
    val idNotification = (System.currentTimeMillis() % 10000).toInt()
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
    {
        startForeground(idNotification, Notification.Builder(this, NotificationService.channelId).build())

        audioManager = getSystemService(AUDIO_SERVICE) as AudioManager
        playbackAttributes = AudioAttributes.Builder()
            .setUsage(AudioAttributes.USAGE_ALARM)
            .setUsage(AudioAttributes.USAGE_GAME)
            .setUsage(AudioAttributes.USAGE_ASSISTANT)
            .setUsage(AudioAttributes.USAGE_MEDIA)
            .setUsage(AudioAttributes.USAGE_UNKNOWN)
            .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION)
            .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION_SIGNALLING)
            .setUsage(AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE)
            .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION)
            .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
            .build()

        val mHandler = Handler(Looper.getMainLooper())

        val audioFocusChangeListener =
            AudioManager.OnAudioFocusChangeListener()
            { focusChange ->
                val musicActivity = MusicActivity()

                Log.d("AudioListener", focusChange.toString())

                when (focusChange)
                {
                    AudioManager.AUDIOFOCUS_LOSS, AudioManager.AUDIOFOCUS_GAIN -> //-1 and 1
                    {
                        if (!resting && player != null) //Music is not resting
                        {
                            musicActivity.playThisPlayer()
                        }
                    }

                    AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> //-2
                    {
                        if (!resting && player != null) //Music is not resting
                        {
                            musicActivity.pauseThisPlayer()
                        }
                    }
                }
            }

        val focusRequest = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
            .setAudioAttributes(playbackAttributes)
            .setAcceptsDelayedFocusGain(true)
            .setOnAudioFocusChangeListener(audioFocusChangeListener)
            .build()

        audioFocusRequest = audioManager.requestAudioFocus(focusRequest)
    }
}

override fun onDestroy()
{
    super.onDestroy()
}

override fun onTaskRemoved(rootIntent: Intent)
{
    stopSelf()
}

然后这是 StartMusicPlayerService 类代码,它包含 AudioManager.OnAudioFocusChangeListener() 中的焦点。我在这个服务类中创建 AudioFocus(仅实现 Service())

那么,我应该怎么做才能让 AudioManager.OnAudioFocusChangeListener() 在 focusChange 为 -1 后再次工作?我正在寻找解决方案,但它并没有解决我的问题。 (我不太了解Service和AudioFocus)

android android-studio kotlin broadcastreceiver android-music-player
© www.soinside.com 2019 - 2024. All rights reserved.