根据Service及BroadcastReceiver的知识讲解和案例使用,实现一个Android音乐播放器。要求能实现音乐的播放,暂停,上一首,下一首等功能。用Kotlin制作简易app
时间: 2024-01-24 10:17:14 浏览: 197
Android使用Service及BroadcastReceiver实现音乐播放器
好的,让我们来一步一步实现这个Android音乐播放器。
首先,我们需要准备音乐文件。把音乐文件放在 `/res/raw` 目录下。
接着,我们需要创建一个播放服务 `MusicService`。这个服务会在后台播放音乐。
```kotlin
class MusicService : Service(), MediaPlayer.OnCompletionListener {
private lateinit var mediaPlayer: MediaPlayer
private var musicList = ArrayList<Int>()
private var currentIndex = -1
override fun onBind(intent: Intent?): IBinder? {
return null
}
override fun onCreate() {
super.onCreate()
mediaPlayer = MediaPlayer()
mediaPlayer.setOnCompletionListener(this)
musicList.add(R.raw.music1)
musicList.add(R.raw.music2)
musicList.add(R.raw.music3)
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
when (intent?.action) {
ACTION_PLAY -> {
val index = intent.getIntExtra(EXTRA_INDEX, 0)
play(index)
}
ACTION_PAUSE -> pause()
ACTION_RESUME -> resume()
ACTION_PREVIOUS -> previous()
ACTION_NEXT -> next()
}
return START_NOT_STICKY
}
override fun onCompletion(mp: MediaPlayer?) {
next()
}
private fun play(index: Int) {
if (musicList.isEmpty()) return
if (index < 0) {
currentIndex = musicList.size - 1
} else if (index >= musicList.size) {
currentIndex = 0
} else {
currentIndex = index
}
mediaPlayer.apply {
reset()
setDataSource(applicationContext, Uri.parse("android.resource://${packageName}/${musicList[currentIndex]}"))
prepare()
start()
}
}
private fun pause() {
mediaPlayer.pause()
}
private fun resume() {
mediaPlayer.start()
}
private fun previous() {
play(currentIndex - 1)
}
private fun next() {
play(currentIndex + 1)
}
}
```
上面的代码中,我们创建了一个 `MediaPlayer` 对象来播放音乐。`musicList` 是存放音乐文件的列表,`currentIndex` 是当前播放的音乐文件的下标。`play` 方法用来播放音乐,`pause` 方法用来暂停音乐,`resume` 方法用来继续播放音乐,`previous` 方法用来播放上一首音乐,`next` 方法用来播放下一首音乐。当一首音乐播放完成时,会自动播放下一首音乐。
接着,我们需要创建几个常量。
```kotlin
const val ACTION_PLAY = "com.example.musicplayer.action.PLAY"
const val ACTION_PAUSE = "com.example.musicplayer.action.PAUSE"
const val ACTION_RESUME = "com.example.musicplayer.action.RESUME"
const val ACTION_PREVIOUS = "com.example.musicplayer.action.PREVIOUS"
const val ACTION_NEXT = "com.example.musicplayer.action.NEXT"
const val EXTRA_INDEX = "com.example.musicplayer.extra.INDEX"
```
这些常量用来表示不同的播放操作。
然后,我们需要创建一个 `MusicPlayer` 类来控制音乐播放。
```kotlin
class MusicPlayer(private val context: Context) {
private val intentPlay = Intent(context, MusicService::class.java).apply {
action = ACTION_PLAY
}
private val intentPause = Intent(context, MusicService::class.java).apply {
action = ACTION_PAUSE
}
private val intentResume = Intent(context, MusicService::class.java).apply {
action = ACTION_RESUME
}
private val intentPrevious = Intent(context, MusicService::class.java).apply {
action = ACTION_PREVIOUS
}
private val intentNext = Intent(context, MusicService::class.java).apply {
action = ACTION_NEXT
}
fun play(index: Int) {
intentPlay.apply {
putExtra(EXTRA_INDEX, index)
context.startService(this)
}
}
fun pause() {
context.startService(intentPause)
}
fun resume() {
context.startService(intentResume)
}
fun previous() {
context.startService(intentPrevious)
}
fun next() {
context.startService(intentNext)
}
}
```
这个类实现了音乐播放器的控制逻辑。我们可以通过调用 `play` 方法来播放音乐,通过调用 `pause` 方法来暂停音乐,通过调用 `resume` 方法来继续播放音乐,通过调用 `previous` 方法来播放上一首音乐,通过调用 `next` 方法来播放下一首音乐。
最后,我们需要创建一个 `MainActivity` 来显示用户界面。
```kotlin
class MainActivity : AppCompatActivity() {
private lateinit var musicPlayer: MusicPlayer
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
musicPlayer = MusicPlayer(this)
buttonPlay.setOnClickListener {
musicPlayer.play(0)
}
buttonPause.setOnClickListener {
musicPlayer.pause()
}
buttonResume.setOnClickListener {
musicPlayer.resume()
}
buttonPrevious.setOnClickListener {
musicPlayer.previous()
}
buttonNext.setOnClickListener {
musicPlayer.next()
}
}
}
```
这个界面有几个按钮,分别对应不同的操作。当用户点击一个按钮时,会调用相应的方法来控制音乐播放器。
好了,现在我们完成了一个简单的Android音乐播放器。当用户点击播放按钮时,会播放第一首音乐。用户可以暂停,继续播放,播放上一首音乐,播放下一首音乐。
阅读全文