在通知流上播放声音
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()
}
}
我检查了 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()
}
}