Воспроизвести звук в потоке уведомлений - PullRequest
1 голос
/ 26 февраля 2020

Я проверил, что такое приложение, и звуки отправки / получения воспроизводятся только в потоке УВЕДОМЛЕНИЯ на android, когда вы находитесь в чате.

У нас есть четыре потоковых канала в android:

  • Рингтон
  • Мультимедиа
  • Уведомление
  • Система

Я хочу воспроизводить звук при Уведомление stream.

Пример кода, который не работает:

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()
    }

1 Ответ

0 голосов
/ 07 марта 2020

Добавление метода 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()
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...