70 lines
2.8 KiB
Kotlin
70 lines
2.8 KiB
Kotlin
package io.legato.kazusa.help
|
|
|
|
import android.content.Context
|
|
import android.media.AudioManager
|
|
import android.media.MediaPlayer
|
|
import android.support.v4.media.session.PlaybackStateCompat
|
|
import androidx.media.AudioAttributesCompat
|
|
import androidx.media.AudioFocusRequestCompat
|
|
import androidx.media.AudioManagerCompat
|
|
import io.legato.kazusa.R
|
|
import splitties.systemservices.audioManager
|
|
|
|
object MediaHelp {
|
|
|
|
const val MEDIA_SESSION_ACTIONS = (PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS
|
|
or PlaybackStateCompat.ACTION_REWIND
|
|
or PlaybackStateCompat.ACTION_PLAY
|
|
or PlaybackStateCompat.ACTION_PLAY_PAUSE
|
|
or PlaybackStateCompat.ACTION_PAUSE
|
|
or PlaybackStateCompat.ACTION_STOP
|
|
or PlaybackStateCompat.ACTION_FAST_FORWARD
|
|
or PlaybackStateCompat.ACTION_SKIP_TO_NEXT
|
|
or PlaybackStateCompat.ACTION_SEEK_TO
|
|
or PlaybackStateCompat.ACTION_SET_RATING
|
|
or PlaybackStateCompat.ACTION_PLAY_FROM_MEDIA_ID
|
|
or PlaybackStateCompat.ACTION_PLAY_FROM_SEARCH
|
|
or PlaybackStateCompat.ACTION_SKIP_TO_QUEUE_ITEM
|
|
or PlaybackStateCompat.ACTION_PLAY_FROM_URI
|
|
or PlaybackStateCompat.ACTION_PREPARE
|
|
or PlaybackStateCompat.ACTION_PREPARE_FROM_MEDIA_ID
|
|
or PlaybackStateCompat.ACTION_PREPARE_FROM_SEARCH
|
|
or PlaybackStateCompat.ACTION_PREPARE_FROM_URI
|
|
or PlaybackStateCompat.ACTION_SET_REPEAT_MODE
|
|
or PlaybackStateCompat.ACTION_SET_SHUFFLE_MODE
|
|
or PlaybackStateCompat.ACTION_SET_CAPTIONING_ENABLED)
|
|
|
|
fun buildAudioFocusRequestCompat(
|
|
audioFocusChangeListener: AudioManager.OnAudioFocusChangeListener
|
|
): AudioFocusRequestCompat {
|
|
val mPlaybackAttributes = AudioAttributesCompat.Builder()
|
|
.setUsage(AudioAttributesCompat.USAGE_MEDIA)
|
|
.setContentType(AudioAttributesCompat.CONTENT_TYPE_MUSIC)
|
|
.build()
|
|
return AudioFocusRequestCompat.Builder(AudioManagerCompat.AUDIOFOCUS_GAIN)
|
|
.setAudioAttributes(mPlaybackAttributes)
|
|
.setOnAudioFocusChangeListener(audioFocusChangeListener)
|
|
.build()
|
|
}
|
|
|
|
|
|
/**
|
|
* @return 音频焦点
|
|
*/
|
|
fun requestFocus(focusRequest: AudioFocusRequestCompat): Boolean {
|
|
val request = AudioManagerCompat.requestAudioFocus(audioManager, focusRequest)
|
|
return request == AudioManager.AUDIOFOCUS_REQUEST_GRANTED
|
|
}
|
|
|
|
/**
|
|
* 播放静音音频,用来获取音频焦点
|
|
*/
|
|
fun playSilentSound(mContext: Context) {
|
|
kotlin.runCatching {
|
|
// Stupid Android 8 "Oreo" hack to make media buttons work
|
|
val mMediaPlayer = MediaPlayer.create(mContext, R.raw.silent_sound)
|
|
mMediaPlayer.setOnCompletionListener { mMediaPlayer.release() }
|
|
mMediaPlayer.start()
|
|
}
|
|
}
|
|
} |