Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
SDK
/
exoplayer
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
6ce3421c
authored
Jan 16, 2023
by
tianyifeng
Committed by
Rohit Singh
Jan 17, 2023
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Post notification for session app when FgS starting exception is caught
PiperOrigin-RevId: 502407886
parent
abe11c88
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
67 additions
and
8 deletions
demos/session/src/main/java/androidx/media3/demo/session/PlaybackService.kt
demos/session/src/main/res/values/strings.xml
demos/session/src/main/java/androidx/media3/demo/session/PlaybackService.kt
View file @
6ce3421c
...
...
@@ -15,22 +15,22 @@
*/
package
androidx.media3.demo.session
import
android.app.PendingIntent.FLAG_IMMUTABLE
import
android.app.PendingIntent.FLAG_UPDATE_CURRENT
import
android.app.Notification.BigTextStyle
import
android.app.NotificationChannel
import
android.app.NotificationManager
import
android.app.PendingIntent.*
import
android.app.TaskStackBuilder
import
android.content.Intent
import
android.os.Build
import
android.os.Bundle
import
androidx.core.app.NotificationCompat
import
androidx.core.app.NotificationManagerCompat
import
androidx.media3.common.AudioAttributes
import
androidx.media3.common.MediaItem
import
androidx.media3.common.util.Util
import
androidx.media3.exoplayer.ExoPlayer
import
androidx.media3.session.CommandButton
import
androidx.media3.session.LibraryResult
import
androidx.media3.session.MediaLibraryService
import
androidx.media3.session.MediaSession
import
androidx.media3.session.*
import
androidx.media3.session.MediaSession.ControllerInfo
import
androidx.media3.session.SessionCommand
import
androidx.media3.session.SessionResult
import
com.google.common.collect.ImmutableList
import
com.google.common.util.concurrent.Futures
import
com.google.common.util.concurrent.ListenableFuture
...
...
@@ -51,6 +51,8 @@ class PlaybackService : MediaLibraryService() {
"android.media3.session.demo.SHUFFLE_ON"
private
const
val
CUSTOM_COMMAND_TOGGLE_SHUFFLE_MODE_OFF
=
"android.media3.session.demo.SHUFFLE_OFF"
private
const
val
NOTIFICATION_ID
=
123
private
const
val
CHANNEL_ID
=
"demo_session_notification_channel_id"
}
override
fun
onCreate
()
{
...
...
@@ -66,6 +68,7 @@ class PlaybackService : MediaLibraryService() {
)
customLayout
=
ImmutableList
.
of
(
customCommands
[
0
])
initializeSessionAndPlayer
()
setListener
(
MediaSessionServiceListener
())
}
override
fun
onGetSession
(
controllerInfo
:
ControllerInfo
):
MediaLibrarySession
{
...
...
@@ -81,6 +84,7 @@ class PlaybackService : MediaLibraryService() {
override
fun
onDestroy
()
{
player
.
release
()
mediaLibrarySession
.
release
()
clearListener
()
super
.
onDestroy
()
}
...
...
@@ -259,4 +263,54 @@ class PlaybackService : MediaLibraryService() {
private
fun
ignoreFuture
(
customLayout
:
ListenableFuture
<
SessionResult
>)
{
/* Do nothing. */
}
private
inner
class
MediaSessionServiceListener
:
Listener
{
/**
* This method is only required to be implemented on Android 12 or above when an attempt is made
* by a media controller to resume playback when the {@link MediaSessionService} is in the
* background.
*/
override
fun
onForegroundServiceStartNotAllowedException
()
{
createNotificationAndNotify
()
}
}
private
fun
createNotificationAndNotify
()
{
var
notificationManagerCompat
=
NotificationManagerCompat
.
from
(
this
)
ensureNotificationChannel
(
notificationManagerCompat
)
var
pendingIntent
=
TaskStackBuilder
.
create
(
this
).
run
{
addNextIntent
(
Intent
(
this
@PlaybackService
,
MainActivity
::
class
.
java
))
val
immutableFlag
=
if
(
Build
.
VERSION
.
SDK_INT
>=
23
)
FLAG_IMMUTABLE
else
0
getPendingIntent
(
0
,
immutableFlag
or
FLAG_UPDATE_CURRENT
)
}
var
builder
=
NotificationCompat
.
Builder
(
this
,
CHANNEL_ID
)
.
setContentIntent
(
pendingIntent
)
.
setSmallIcon
(
R
.
drawable
.
media3_notification_small_icon
)
.
setContentTitle
(
getString
(
R
.
string
.
notification_content_title
))
.
setStyle
(
NotificationCompat
.
BigTextStyle
().
bigText
(
getString
(
R
.
string
.
notification_content_text
))
)
.
setPriority
(
NotificationCompat
.
PRIORITY_DEFAULT
)
.
setAutoCancel
(
true
)
notificationManagerCompat
.
notify
(
NOTIFICATION_ID
,
builder
.
build
())
}
private
fun
ensureNotificationChannel
(
notificationManagerCompat
:
NotificationManagerCompat
)
{
if
(
Util
.
SDK_INT
<
26
||
notificationManagerCompat
.
getNotificationChannel
(
CHANNEL_ID
)
!=
null
)
{
return
}
val
channel
=
NotificationChannel
(
CHANNEL_ID
,
getString
(
R
.
string
.
notification_channel_name
),
NotificationManager
.
IMPORTANCE_DEFAULT
)
notificationManagerCompat
.
createNotificationChannel
(
channel
)
}
}
demos/session/src/main/res/values/strings.xml
View file @
6ce3421c
...
...
@@ -24,4 +24,9 @@
<string
name=
"no_item_prompt"
>
"! No media in the play list !\nPlease try to add more from browser"
</string>
<string
name=
"notification_content_title"
>
Playback cannot be resumed
</string>
<string
name=
"notification_content_text"
>
Press on the play button on the media notification if it
is still present, otherwise please open the app to start the playback and re-connect the session
to the controller
</string>
<string
name=
"notification_channel_name"
>
Playback cannot be resumed
</string>
</resources>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment