Я испробовал все возможные шаги, но дал значение только один раз, я хочу, чтобы оно обновлялось каждую секунду. это мой код, где я делаю неправильно?
я хочу внедрить слайдер прогресса для музыки, кто-нибудь может мне помочь?
здесь я использую библиотеку слайдеров, диапазон которой вы принимаете в этой библиотеке: от текущей позиции до общей продолжительности.
data class MusicPlayerStates(
var playingSongCurrentPosition: MutableState = mutableIntStateOf(0),
var playingSongDuration: MutableState = mutableIntStateOf(0),
//other code
)
fun onEvent(event: MusicPlayerUiEvents) {
when (event) {
is MusicPlayerUiEvents.PlaySong -> {
mediaPlayer?.let {
if (it.isPlaying) {
mediaPlayer?.stop()
mediaPlayer?.reset()
_musicPlayerState.update { state ->
state.copy(
playingSongCurrentPosition = state.playingSongCurrentPosition.apply {
this.value = 0
},
playingSongDuration = state.playingSongDuration.apply {
this.value = 0
}
)
}
}
}
_musicPlayerState.update {
it.copy(
isSongPlaying = it.isSongPlaying.apply {
this.value = true
}
)
}
mediaPlayer?.release()
mediaPlayer = MediaPlayer().apply {
setDataSource(event.url)
prepareAsync()
}
mediaPlayer?.setOnPreparedListener { mediaPlayer ->
mediaPlayer.seekTo(state.value.playingSongCurrentPosition.value)
mediaPlayer.start()
setSongDuration(mediaPlayer.duration)
updatePlaybackState(mediaPlayer.currentPosition)
Log.d("check for currentD_VM","${state.value.playingSongCurrentPosition.value}")
}
mediaPlayer?.setOnCompletionListener { mediaPlayer ->
// Use for precise updates
mediaPlayer?.stop()
_musicPlayerState.update { state ->
state.copy(
playingSongCurrentPosition = state.playingSongCurrentPosition.apply {
this.value = 0
},
playingSongDuration = state.playingSongDuration.apply {
this.value = 0
},
isSongPlaying = state.isSongPlaying.apply {
this.value = false
},
)
}
}
}
}
}
}
private fun updatePlaybackState(currentPosition: Int) {
_musicPlayerState.update {
it.copy(
playingSongCurrentPosition = it.playingSongCurrentPosition.apply {
this.value = currentPosition
}
)
}
}
private fun setSongDuration(duration: Int) {
_musicPlayerState.update {
it.copy(
playingSongDuration = it.playingSongDuration.apply {
this.value = duration
}
)
}
}
Box(
modifier =
Modifier
.padding(vertical = 80.dp, horizontal = 20.dp)
.fillMaxWidth()
.height(20.dp)
) {
var fraction by remember { mutableFloatStateOf(1f) }
WavySlider(
valueRange = 1000f..state.playingSongDuration.value.toFloat(),
value = 1000f,
onValueChange = { },
waveLength = 25.dp, // Set this to 0.dp to get a regular Slider
waveHeight = 10.dp, // Set this to 0.dp to get a regular Slider
waveVelocity = 15.dp to WaveDirection.HEAD, // Speed per second and its direction
waveThickness = 4.dp, // Defaults to the specified trackThickness
trackThickness = 4.dp, // Defaults to 4.dp, same as regular Slider
incremental = false, // Whether to gradually increase waveHeight
// animationSpecs = ... // Customize various animations of the wave
)
}
Подробнее здесь: https://stackoverflow.com/questions/783 ... lay-on-the
Как я могу получить текущую продолжительность из медиаплеера для отображения на индикаторе выполнения песни? ⇐ Android
Форум для тех, кто программирует под Android
1712900667
Anonymous
Я испробовал все возможные шаги, но дал значение только один раз, я хочу, чтобы оно обновлялось каждую секунду. это мой код, где я делаю неправильно?
я хочу внедрить слайдер прогресса для музыки, кто-нибудь может мне помочь?
здесь я использую библиотеку слайдеров, диапазон которой вы принимаете в этой библиотеке: от текущей позиции до общей продолжительности.
data class MusicPlayerStates(
var playingSongCurrentPosition: MutableState = mutableIntStateOf(0),
var playingSongDuration: MutableState = mutableIntStateOf(0),
//other code
)
fun onEvent(event: MusicPlayerUiEvents) {
when (event) {
is MusicPlayerUiEvents.PlaySong -> {
mediaPlayer?.let {
if (it.isPlaying) {
mediaPlayer?.stop()
mediaPlayer?.reset()
_musicPlayerState.update { state ->
state.copy(
playingSongCurrentPosition = state.playingSongCurrentPosition.apply {
this.value = 0
},
playingSongDuration = state.playingSongDuration.apply {
this.value = 0
}
)
}
}
}
_musicPlayerState.update {
it.copy(
isSongPlaying = it.isSongPlaying.apply {
this.value = true
}
)
}
mediaPlayer?.release()
mediaPlayer = MediaPlayer().apply {
setDataSource(event.url)
prepareAsync()
}
mediaPlayer?.setOnPreparedListener { mediaPlayer ->
mediaPlayer.seekTo(state.value.playingSongCurrentPosition.value)
mediaPlayer.start()
setSongDuration(mediaPlayer.duration)
updatePlaybackState(mediaPlayer.currentPosition)
Log.d("check for currentD_VM","${state.value.playingSongCurrentPosition.value}")
}
mediaPlayer?.setOnCompletionListener { mediaPlayer ->
// Use for precise updates
mediaPlayer?.stop()
_musicPlayerState.update { state ->
state.copy(
playingSongCurrentPosition = state.playingSongCurrentPosition.apply {
this.value = 0
},
playingSongDuration = state.playingSongDuration.apply {
this.value = 0
},
isSongPlaying = state.isSongPlaying.apply {
this.value = false
},
)
}
}
}
}
}
}
private fun updatePlaybackState(currentPosition: Int) {
_musicPlayerState.update {
it.copy(
playingSongCurrentPosition = it.playingSongCurrentPosition.apply {
this.value = currentPosition
}
)
}
}
private fun setSongDuration(duration: Int) {
_musicPlayerState.update {
it.copy(
playingSongDuration = it.playingSongDuration.apply {
this.value = duration
}
)
}
}
Box(
modifier =
Modifier
.padding(vertical = 80.dp, horizontal = 20.dp)
.fillMaxWidth()
.height(20.dp)
) {
var fraction by remember { mutableFloatStateOf(1f) }
WavySlider(
valueRange = 1000f..state.playingSongDuration.value.toFloat(),
value = 1000f,
onValueChange = { },
waveLength = 25.dp, // Set this to 0.dp to get a regular Slider
waveHeight = 10.dp, // Set this to 0.dp to get a regular Slider
waveVelocity = 15.dp to WaveDirection.HEAD, // Speed per second and its direction
waveThickness = 4.dp, // Defaults to the specified trackThickness
trackThickness = 4.dp, // Defaults to 4.dp, same as regular Slider
incremental = false, // Whether to gradually increase waveHeight
// animationSpecs = ... // Customize various animations of the wave
)
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78313416/how-can-i-retrieve-the-current-duration-from-the-media-player-to-display-on-the[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия