android - 如何让 Exoplayer 一直在后台运行?
问题描述
我正在使用 Android Kotlin 中的 Exoplayer 创建一个简单的音乐播放器。(播放存储中的本地 MP3)
问题是播放音乐在应用程序之外停止,如果手机打开睡眠模式。所以,我尝试实现前台服务,但没有奏效。
下面是我的代码,没有我尝试实现前台服务的部分。
请让我知道如何解决此问题或如何正确实施前台服务。
类 AudioviewActivity : AppCompatActivity() {
private var player: SimpleExoPlayer? = null
private var playbackPosition = 0L
private var currentWindow = 0
private var playWhenReady = false
override fun onBackPressed() {
super.onBackPressed()
player!!.stop()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_audioview)
}
private fun initializePlayer() {
if (player == null) {
player = ExoPlayerFactory.newSimpleInstance(this)
val userAgent = Util.getUserAgent(this, "Mymusicplayer")
val mediaSource = ExtractorMediaSource(
Uri.parse("asset:///trackone.mp3"),
DefaultDataSourceFactory(this, userAgent), DefaultExtractorsFactory(),
null, null)
player!!.prepare(mediaSource)
player!!.seekTo(currentWindow, playbackPosition)
player!!.playWhenReady = playWhenReady
player!!.repeatMode = SimpleExoPlayer.REPEAT_MODE_ONE
}
}
private fun releasePlayer() {
player?.let {
playbackPosition = it.currentPosition
currentWindow = it.currentWindowIndex
playWhenReady = it.playWhenReady
it.release()
player = null
}
}
override fun onResume() {
super.onResume()
initializePlayer()
}
override fun onRestart() {
super.onRestart()
initializePlayer()
}
override fun onStop() {
super.onStop()
releasePlayer()
}
}
解决方案
由于您在 Onstop 中释放播放器,因此当您的应用程序进入后台时,将调用 Onstop 并且您正在释放播放器,因此不要在 OnStop() 中释放播放器,删除那部分代码。
推荐阅读
- bash - 比较两个文件中的行的快速方法?
- html - 如何否定浏览器行为以四舍五入/保持不成比例的像素值?
- android - 如何在android中的Material Toolbar下方添加行?
- pandas - 我尝试应用轨道校正,但遇到错误:只能从 Dataset.loc 中查找字典
- google-chrome - 如何将样式选项卡放置在检查元素工作区的底部?
- reactjs - React:处理需要包装器的组件
- mysql - 内部和外部查询之间的关系问题,mySQL
- c - Floyd算法写的最短路径有什么问题?
- java - 在 Android Studio 中使用图片创建视频
- javascript - 动态添加和删除表单字段(避免重复的字段名称)