android - 启动应用时自动播放音乐
问题描述
我想知道如何在启动应用程序时自动播放音乐,以及如何在按下主页按钮时使其停止在后台播放。现在,它通过按下切换按钮启动和停止。我还想知道是否可以在进行其他活动时自动切换到其他音乐?
MainActivity.kt
private lateinit var player: MediaPlayer
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val secondActivity = findViewById<Button>(R.id.secondActivity)
secondActivity.setOnClickListener {
val intent = Intent(this, MainActivity2::class.java)
startActivity(intent)
}
val toggle: ToggleButton = findViewById(R.id.toggleButton)
toggle.setOnCheckedChangeListener { _, isChecked ->
val svc = Intent(this, MusicService::class.java)
if (isChecked) {
startService(svc)
} else {
stopService(svc)
}
}
}
音乐服务.kt
class MusicService : Service() {
private lateinit var player: MediaPlayer
override fun onBind(intent: Intent?): IBinder? {
TODO("Return the communication channel to the service.")
return null
}
override fun onCreate() {
super.onCreate()
player = MediaPlayer.create(this, R.raw.music)
player.setLooping(true)
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
player.start()
return START_STICKY
}
override fun onDestroy() {
super.onDestroy()
player.stop()
}
}
解决方案
根据您的具体要求,您应该或不应该使用 aMediaService
作为解决方案的一部分。
更清楚地说,Service
仅当您希望音频在您在应用程序之外时继续播放时才应使用。此解决方案通常会附带一个媒体通知,您应该在其中填充控件、图像资产等。(想想 Spotify 或 SoundCloud)如果这是您正在寻找的解决方案,请查看 Google 的此文档页面和跟随它。请注意,这是一个更长、更难维护的过程。
另一方面,如果您只想在用户在您的应用程序内时播放音乐/声音,那么一个简单的
private lateinit var localMedia: MediaPlayer
override fun onCreate() {
...
localMedia = MediaPlayer.create(context, R.raw.your_audio_file)
}
override fun onResume() {
...
localMedia.start()
}
override fun onPause() {
...
localMedia.release()
}
此外,如果您希望在不同的活动/片段上播放不同的音频文件,您可能希望将我上面提供的代码抽象到它自己的 Manager 类中,并以相同的方式访问它,但更改特定的 .mp3 文件(或任何格式) 你认为合适的。
编辑:
对于 Manager 类,您必须创建自己的函数并处理其MediaPlayer
内部
private class MediaPlayerManager(private val context: Context) {
private lateinit var mediaPlayer: MediaPlayer
fun setupPlayer() {
mediaPlayer = MediaPlayer.create(context, R.raw.your_audio_file)
}
fun play() {
mediaPlayer.start()
}
fun stop() {
mediaPlayer.stop()
}
}
并根据您的特定需求,从您的 Activity/Fragment 中它们各自的生命周期方法调用这些函数
class YourActivity {
val mediaPlayerManager = MediaPlayerManager(context)
override onCreate() {
...
mediaPlayerManager.setupPlayer()
}
override fun onResume() {
...
mediaPlayerManager.play()
}
override fun onPause() {
...
mediaPlayerManager.stop()
}
}
我应该补充一点,我不一定在这里提供一个完整的答案,而是您根据自己的需求进行按摩的起点。Manager 类不过是我试图传达的概念的抽象。MediaPlayer
最后,如果您想在另一个 Activity/Fragment 中使用不同的音频资源文件,则必须创建一个方法来使用适当的文件重新分配其中的对象。例如
fun setupPlayer(audioRes: Int) {
mediaPlayer = MediaPlayer.create(context, audioRes)
}
推荐阅读
- node.js - 如何从测试中获取 puppeteer 对象?
- r - 如何绘制具有数据框的分组 geom_bar 图?
- firebase - 仅使用电子邮件登录 Firebase(无链接,无密码)
- android - 可拖动的弹出窗口
- java - 使用 MockServer 进行测试时如何验证正确的响应数?
- debugging - 如何使用返回 REAL 的 fortran95 函数修复“return-type”和“no IMPLICIT type”错误
- amazon-web-services - 使用 CloudFront 函数将 X-Frame-Options 标头添加到所有 URL
- python-3.x - Python Netmiko 超时问题
- node.js - 使用输入值更新 mongodb 中的数据
- r - R - 根据另一个数据帧中的日期和其他值从一个数据帧中减去行