summaryrefslogtreecommitdiff
path: root/kotlin/src/com/android/music/MediaPlaybackService.kt
diff options
context:
space:
mode:
Diffstat (limited to 'kotlin/src/com/android/music/MediaPlaybackService.kt')
-rw-r--r--kotlin/src/com/android/music/MediaPlaybackService.kt91
1 files changed, 91 insertions, 0 deletions
diff --git a/kotlin/src/com/android/music/MediaPlaybackService.kt b/kotlin/src/com/android/music/MediaPlaybackService.kt
new file mode 100644
index 0000000..c7df9ec
--- /dev/null
+++ b/kotlin/src/com/android/music/MediaPlaybackService.kt
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.music
+
+import android.app.PendingIntent
+import android.content.Context
+import android.content.Intent
+import android.media.browse.MediaBrowser.MediaItem
+import android.media.session.MediaSession
+import android.media.session.PlaybackState
+import android.os.Bundle
+import android.service.media.MediaBrowserService
+import android.util.Log
+
+/**
+ * Provides "background" audio playback capabilities, allowing the
+ * user to switch between activities without stopping playback.
+ */
+class MediaPlaybackService : MediaBrowserService() {
+
+ private lateinit var mSession: MediaSession
+
+ override fun onCreate() {
+ super.onCreate()
+
+ // Start a new MediaSession
+ mSession = MediaSession(this, "MediaPlaybackService")
+ // Enable callbacks from MediaButtons and TransportControls
+ mSession.setFlags(MediaSession.FLAG_HANDLES_MEDIA_BUTTONS
+ or MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS)
+ // Set an initial PlaybackState with ACTION_PLAY, so media buttons can start the player
+ val stateBuilder: PlaybackState.Builder = PlaybackState.Builder().setActions(
+ PlaybackState.ACTION_PLAY or PlaybackState.ACTION_PLAY_PAUSE)
+ mSession.setPlaybackState(stateBuilder.build())
+ setSessionToken(mSession.getSessionToken())
+ val context: Context = getApplicationContext()
+ val intent = Intent(context, MusicBrowserActivity::class.java)
+ val pi: PendingIntent = PendingIntent.getActivity(
+ context, 99 /*request code*/, intent, PendingIntent.FLAG_UPDATE_CURRENT)
+ mSession.setSessionActivity(pi)
+ }
+
+ override fun onStartCommand(startIntent: Intent?, flags: Int, startId: Int): Int {
+ return START_STICKY
+ }
+
+ override fun onDestroy() {}
+
+ override fun onGetRoot(clientPackageName: String, clientUid: Int, rootHints: Bundle?): BrowserRoot? {
+ return null
+ }
+
+ override fun onLoadChildren(parentMediaId: String, result: Result<List<MediaItem>>) {
+ result.sendResult(null)
+ }
+
+ private inner class MediaSessionCallback : MediaSession.Callback() {
+ override fun onPlay() {}
+
+ override fun onSkipToQueueItem(queueId: Long) {}
+
+ override fun onSeekTo(position: Long) {}
+
+ override fun onPlayFromMediaId(mediaId: String?, extras: Bundle?) {}
+
+ override fun onPause() {}
+
+ override fun onStop() {}
+
+ override fun onSkipToNext() {}
+
+ override fun onSkipToPrevious() {}
+
+ override fun onPlayFromSearch(query: String?, extras: Bundle?) {}
+
+ override fun onCustomAction(action: String, extras: Bundle?) {}
+ }
+} \ No newline at end of file