在通知流上播放声音

Play Sound on Notification Stream

我检查了 whats 应用程序,send/receive 消息声音仅在 android 的 NOTIFICATION 流中播放,当您在聊天时。

我们在 android 中有四个流媒体频道:

我想在 Notification 流上播放声音。

似乎不​​起作用的示例代码:

try {
        with(mediaPlayer) {
            reset()
            setDataSource(
                requireContext(),
                Uri.parse("android.resource://${requireContext().packageName}/" + R.raw.sound_all_outgoingmessage)
            )
            setAudioStreamType(AudioManager.STREAM_NOTIFICATION);
            setAudioAttributes(
                AudioAttributes
                    .Builder()
                    .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                    .build())
            prepare()
            setOnCompletionListener { play = true }
            if (!isPlaying && play) {
                play = false
                start()
            }
        }
    } catch (e: Exception) {
        play = true
        e.printStackTrace()
    }

添加 setUsage() 方法解决了我的问题。

fun playSound(context: Context, source: Uri) {
        if (!mPlay) return
        try {
            with(mMediaPlayer) {
                reset()
                setDataSource(context, source)
                if (android.os.Build.VERSION.SDK_INT >= 21) {
                    val audioAttribute = android.media.AudioAttributes.Builder()
                        .setUsage(android.media.AudioAttributes.USAGE_NOTIFICATION)
                        .setContentType(android.media.AudioAttributes.CONTENT_TYPE_SONIFICATION)
                        .build()
                    setAudioAttributes(audioAttribute)
                }
                setVolume(0.2f, 0.2f)
                prepare()
                setOnCompletionListener { mPlay = true }
                if (!isPlaying && mPlay) {
                    mPlay = false
                    start()
                }
            }
        } catch (e: Exception) {
            mPlay = true
            e.printStackTrace()
        }
    }