Merge pull request #5095 from zhongerxll/fix-media-control
Fix issue with system media controls not functioning correctly on Samsung devices with Android 15
This commit is contained in:
@@ -48,6 +48,7 @@ import io.legado.app.utils.activityPendingIntent
|
|||||||
import io.legado.app.utils.broadcastPendingIntent
|
import io.legado.app.utils.broadcastPendingIntent
|
||||||
import io.legado.app.utils.getPrefBoolean
|
import io.legado.app.utils.getPrefBoolean
|
||||||
import io.legado.app.utils.isVivoDevice
|
import io.legado.app.utils.isVivoDevice
|
||||||
|
import io.legado.app.utils.isSamsungDevice
|
||||||
import io.legado.app.utils.observeEvent
|
import io.legado.app.utils.observeEvent
|
||||||
import io.legado.app.utils.observeSharedPreferences
|
import io.legado.app.utils.observeSharedPreferences
|
||||||
import io.legado.app.utils.postEvent
|
import io.legado.app.utils.postEvent
|
||||||
@@ -452,11 +453,42 @@ abstract class BaseReadAloudService : BaseService(),
|
|||||||
*/
|
*/
|
||||||
@SuppressLint("UnspecifiedImmutableFlag")
|
@SuppressLint("UnspecifiedImmutableFlag")
|
||||||
private fun initMediaSession() {
|
private fun initMediaSession() {
|
||||||
mediaSessionCompat.setCallback(object : MediaSessionCompat.Callback() {
|
if (isSamsungDevice) {
|
||||||
override fun onMediaButtonEvent(mediaButtonEvent: Intent): Boolean {
|
mediaSessionCompat.setCallback(object : MediaSessionCompat.Callback() {
|
||||||
return MediaButtonReceiver.handleIntent(this@BaseReadAloudService, mediaButtonEvent)
|
override fun onPlay() {
|
||||||
}
|
resumeReadAloud()
|
||||||
})
|
}
|
||||||
|
override fun onPause() {
|
||||||
|
pauseReadAloud()
|
||||||
|
}
|
||||||
|
override fun onSkipToNext() {
|
||||||
|
if (getPrefBoolean("mediaButtonPerNext", false)) {
|
||||||
|
nextChapter()
|
||||||
|
} else{
|
||||||
|
nextP()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
override fun onSkipToPrevious() {
|
||||||
|
if (getPrefBoolean("mediaButtonPerNext", false)) {
|
||||||
|
prevChapter()
|
||||||
|
} else{
|
||||||
|
prevP()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
override fun onStop() {
|
||||||
|
stopSelf()
|
||||||
|
}
|
||||||
|
override fun onMediaButtonEvent(mediaButtonEvent: Intent): Boolean {
|
||||||
|
return MediaButtonReceiver.handleIntent(this@BaseReadAloudService, mediaButtonEvent)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
mediaSessionCompat.setCallback(object : MediaSessionCompat.Callback() {
|
||||||
|
override fun onMediaButtonEvent(mediaButtonEvent: Intent): Boolean {
|
||||||
|
return MediaButtonReceiver.handleIntent(this@BaseReadAloudService, mediaButtonEvent)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
mediaSessionCompat.setMediaButtonReceiver(
|
mediaSessionCompat.setMediaButtonReceiver(
|
||||||
broadcastPendingIntent<MediaButtonReceiver>(Intent.ACTION_MEDIA_BUTTON)
|
broadcastPendingIntent<MediaButtonReceiver>(Intent.ACTION_MEDIA_BUTTON)
|
||||||
)
|
)
|
||||||
@@ -523,7 +555,7 @@ abstract class BaseReadAloudService : BaseService(),
|
|||||||
private fun choiceMediaStyle(): androidx.media.app.NotificationCompat.MediaStyle {
|
private fun choiceMediaStyle(): androidx.media.app.NotificationCompat.MediaStyle {
|
||||||
val mediaStyle = androidx.media.app.NotificationCompat.MediaStyle()
|
val mediaStyle = androidx.media.app.NotificationCompat.MediaStyle()
|
||||||
.setShowActionsInCompactView(1, 2, 4)
|
.setShowActionsInCompactView(1, 2, 4)
|
||||||
if (isVivoDevice) {
|
if (isVivoDevice || isSamsungDevice) {
|
||||||
//fix #4090 android 14 can not show play control in lock screen
|
//fix #4090 android 14 can not show play control in lock screen
|
||||||
mediaStyle.setMediaSession(mediaSessionCompat.sessionToken)
|
mediaStyle.setMediaSession(mediaSessionCompat.sessionToken)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,3 +5,7 @@ import android.os.Build
|
|||||||
val isVivoDevice by lazy {
|
val isVivoDevice by lazy {
|
||||||
Build.MANUFACTURER.equals("vivo", ignoreCase = true)
|
Build.MANUFACTURER.equals("vivo", ignoreCase = true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val isSamsungDevice by lazy {
|
||||||
|
Build.MANUFACTURER.equals("samsung", ignoreCase = true)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user