Я запускаю службу в onCreate в действии, используя startForegroundService для Android Oreo и выше, и использую startService для более низкой версии, в службе я использовал startForeground в службе, вызывая вспомогательные методы для уведомлений, когда приложение находится на переднем плане, проигрыватель работает отлично и показывает уведомление, но как только я удалил приложение из последних приложений, служба уничтожила. Служба должна продолжать работать как служба переднего плана, но я не знаю, почему она продолжает останавливаться.
Я пробовал некоторые решения, такие как startService, вместо startForegroundService для Oreo и выше, я пробовал другие решения, последнее было перезапуск службы после ее уничтожения, но она работает, но не идеальна.
Я тестирую приложение на Android 13
Вот мой деятельность
class MainActivity : ComponentActivity() {
private var isServiceRunning: Boolean = false
private fun startingService(){
if (!isServiceRunning){
var intent = Intent(this, PlaybackSessionService::class.java)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
startForegroundService(intent)
}else{
startService(intent)
}
isServiceRunning = true
}
}
@OptIn(UnstableApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
startingService()
//the rest code compose Ui
Вот моя служба PlaybackSessionService
class PlaybackSessionService: MediaSessionService() {
val mediaSession: MediaSession by inject()
val musiCoNotificationManager: MusiCoNotificationManager by inject()
@OptIn(UnstableApi::class)
override fun onCreate() {
super.onCreate()
Log.e("ks","onCreate service")
musiCoNotificationManager.startNotificationService(
mediaSession = mediaSession,
mediaSessionService = this
)
}
@OptIn(UnstableApi::class)
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
Log.e("ks","onStartCommand service")
musiCoNotificationManager.startNotificationService(
mediaSession = mediaSession,
mediaSessionService = this
)
return super.onStartCommand(intent, flags, startId)
}
override fun onGetSession(controllerInfo: MediaSession.ControllerInfo): MediaSession? {
return mediaSession
}
override fun onTaskRemoved(rootIntent: Intent?) {
super.onTaskRemoved(rootIntent)
}
override fun onDestroy() {
super.onDestroy()
Log.e("ks","Service destroyed")
mediaSession.apply {
release()
if (player.playbackState != Player.STATE_IDLE){
player.seekTo(0)
player.playWhenReady = false
player.stop()
player.release()
}
}
}
}
Вот мой NotificationManager
class MusiCoNotificationManager(
private val context: Context,
private val player: ExoPlayer,
): KoinComponent {
@UnstableApi
fun startNotificationService(
mediaSessionService: MediaSessionService,
mediaSession: MediaSession
){
buildNotification(mediaSession)
startForegroundNotificationService(mediaSessionService)
}
private fun startForegroundNotificationService(mediaSessionService: MediaSessionService){
Log.e("ks","Enter startForeground fun in MusiCoNotificationManager class ")
val notification = NotificationCompat.Builder(context, MusicoApp.NOTIFICATION_CHANNEL_ID)
.setOngoing(true)
.setOnlyAlertOnce(true)
.build()
mediaSessionService.startForeground(MusicoApp.NOTIFICATION_ID,notification)
}
@UnstableApi
private fun buildNotification(mediaSession: MediaSession){
PlayerNotificationManager.Builder(
context,
MusicoApp.NOTIFICATION_ID,
MusicoApp.NOTIFICATION_CHANNEL_ID
)
.setMediaDescriptionAdapter(
MusiCoNotificationAdapter(context = context, pendingIntent = mediaSession.sessionActivity)
)
.setSmallIconResourceId(R.drawable.music_note)
.build()
.also {
it.setMediaSessionToken(mediaSession.platformToken)
it.setUseFastForwardActionInCompactView(true)
it.setUseNextActionInCompactView(true)
it.setUseRewindActionInCompactView(true)
it.setUsePreviousActionInCompactView(true)
it.setPriority(NotificationCompat.PRIORITY_DEFAULT)
it.setPlayer(player)
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... ecent-apps
MediaSessionService уничтожен после удаления приложения из последних приложений ⇐ Android
Форум для тех, кто программирует под Android
1736955466
Anonymous
Я запускаю службу в onCreate в действии, используя startForegroundService для Android Oreo и выше, и использую startService для более низкой версии, в службе я использовал startForeground в службе, вызывая вспомогательные методы для уведомлений, когда приложение находится на переднем плане, проигрыватель работает отлично и показывает уведомление, но как только я удалил приложение из последних приложений, служба уничтожила. Служба должна продолжать работать как служба переднего плана, но я не знаю, почему она продолжает останавливаться.
Я пробовал некоторые решения, такие как startService, вместо startForegroundService для Oreo и выше, я пробовал другие решения, последнее было перезапуск службы после ее уничтожения, но она работает, но не идеальна.
[b]Я тестирую приложение на Android 13[/b]
[b]Вот мой деятельность[/b]
class MainActivity : ComponentActivity() {
private var isServiceRunning: Boolean = false
private fun startingService(){
if (!isServiceRunning){
var intent = Intent(this, PlaybackSessionService::class.java)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
startForegroundService(intent)
}else{
startService(intent)
}
isServiceRunning = true
}
}
@OptIn(UnstableApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
startingService()
//the rest code compose Ui
[b]Вот моя служба PlaybackSessionService[/b]
class PlaybackSessionService: MediaSessionService() {
val mediaSession: MediaSession by inject()
val musiCoNotificationManager: MusiCoNotificationManager by inject()
@OptIn(UnstableApi::class)
override fun onCreate() {
super.onCreate()
Log.e("ks","onCreate service")
musiCoNotificationManager.startNotificationService(
mediaSession = mediaSession,
mediaSessionService = this
)
}
@OptIn(UnstableApi::class)
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
Log.e("ks","onStartCommand service")
musiCoNotificationManager.startNotificationService(
mediaSession = mediaSession,
mediaSessionService = this
)
return super.onStartCommand(intent, flags, startId)
}
override fun onGetSession(controllerInfo: MediaSession.ControllerInfo): MediaSession? {
return mediaSession
}
override fun onTaskRemoved(rootIntent: Intent?) {
super.onTaskRemoved(rootIntent)
}
override fun onDestroy() {
super.onDestroy()
Log.e("ks","Service destroyed")
mediaSession.apply {
release()
if (player.playbackState != Player.STATE_IDLE){
player.seekTo(0)
player.playWhenReady = false
player.stop()
player.release()
}
}
}
}
[b]Вот мой NotificationManager[/b]
class MusiCoNotificationManager(
private val context: Context,
private val player: ExoPlayer,
): KoinComponent {
@UnstableApi
fun startNotificationService(
mediaSessionService: MediaSessionService,
mediaSession: MediaSession
){
buildNotification(mediaSession)
startForegroundNotificationService(mediaSessionService)
}
private fun startForegroundNotificationService(mediaSessionService: MediaSessionService){
Log.e("ks","Enter startForeground fun in MusiCoNotificationManager class ")
val notification = NotificationCompat.Builder(context, MusicoApp.NOTIFICATION_CHANNEL_ID)
.setOngoing(true)
.setOnlyAlertOnce(true)
.build()
mediaSessionService.startForeground(MusicoApp.NOTIFICATION_ID,notification)
}
@UnstableApi
private fun buildNotification(mediaSession: MediaSession){
PlayerNotificationManager.Builder(
context,
MusicoApp.NOTIFICATION_ID,
MusicoApp.NOTIFICATION_CHANNEL_ID
)
.setMediaDescriptionAdapter(
MusiCoNotificationAdapter(context = context, pendingIntent = mediaSession.sessionActivity)
)
.setSmallIconResourceId(R.drawable.music_note)
.build()
.also {
it.setMediaSessionToken(mediaSession.platformToken)
it.setUseFastForwardActionInCompactView(true)
it.setUseNextActionInCompactView(true)
it.setUseRewindActionInCompactView(true)
it.setUsePreviousActionInCompactView(true)
it.setPriority(NotificationCompat.PRIORITY_DEFAULT)
it.setPlayer(player)
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79358800/mediasessionservice-destroyed-after-remove-app-from-recent-apps[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия