Ниже приведен код для воспроизведения. Служба переднего плана просто издает звуковой сигнал с интервалом в 20 секунд (конечно, моя настоящая служба выполняет полезную работу для пользователя) в фоновом режиме.
Если я запущу службу, выйду в главный экран (чтобы мое приложение не отображалось), а затем выключите экран, интервал звукового сигнала даже близко не равен 20 секундам. Это случайно, но примерно от 40 до 60 секунд.
Самое смешное: если я воспроизвожу какой-либо продолжительный звук с помощью музыкального проигрывателя или приложения для подкастов, мое приложение сможет воспроизвести звуковой сигнал с интервалом 20 секунд. Я установил для своего приложения «Разрешить фоновое использование», поэтому не знаю, почему это происходит. Такое случается с Android 14 и 15.
Что не так? Это не невозможно из-за экономии заряда батареи, не так ли? Экономия заряда батареи бессмысленна, если пользователь не может выполнить важную фоновую задачу, которую хочет.
class MyTestService : Service()
{
val serviceJob = SupervisorJob()
val serviceScope = CoroutineScope(Dispatchers.IO + serviceJob)
var needsToQuit = false;
companion object
{
const val CHANNEL_ID = "MyForegroundServiceChannel"
const val NOTIFICATION_ID = 123456
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int
{
needsToQuit = false;
createNotificationChannel()
val notification = buildNotification("Don't kill me…")
startForeground(NOTIFICATION_ID, notification)
doSomethingPeriodically();
return START_STICKY
}
private fun doSomethingPeriodically()
{
serviceScope.launch {
while (isActive)
{
var toneGen = ToneGenerator(AudioManager.STREAM_MUSIC, 100);
toneGen.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 200);
delay(20_000)
}
}
}
private fun buildNotification(contentText: String): Notification
{
return NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("Don't kill me")
.setContentText(contentText)
.setSmallIcon(R.drawable.ic_launcher_foreground)
.build()
}
private fun createNotificationChannel()
{
val channel = NotificationChannel(
CHANNEL_ID,
"Don't kill me",
NotificationManager.IMPORTANCE_LOW
)
val manager = getSystemService(NotificationManager::class.java)
manager?.createNotificationChannel(channel)
}
override fun onBind(intent: Intent?): IBinder?
{
return null;
}
override fun onDestroy()
{
super.onDestroy()
serviceJob.cancel()
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... is-playing
Служба переднего плана с задержкой не работает, если не воспроизводится другое музыкальное приложение ⇐ Android
Форум для тех, кто программирует под Android
1737281208
Anonymous
Ниже приведен код для воспроизведения. Служба переднего плана просто издает звуковой сигнал с интервалом в 20 секунд (конечно, моя настоящая служба выполняет полезную работу для пользователя) в фоновом режиме.
Если я запущу службу, выйду в главный экран (чтобы мое приложение не отображалось), а затем выключите экран, интервал звукового сигнала даже близко не равен 20 секундам. Это случайно, но примерно от 40 до 60 секунд.
Самое смешное: если я воспроизвожу какой-либо продолжительный звук с помощью музыкального проигрывателя или приложения для подкастов, мое приложение сможет воспроизвести звуковой сигнал с интервалом 20 секунд. Я установил для своего приложения «Разрешить фоновое использование», поэтому не знаю, почему это происходит. Такое случается с Android 14 и 15.
Что не так? Это не невозможно из-за экономии заряда батареи, не так ли? Экономия заряда батареи бессмысленна, если пользователь не может выполнить важную фоновую задачу, которую хочет.
class MyTestService : Service()
{
val serviceJob = SupervisorJob()
val serviceScope = CoroutineScope(Dispatchers.IO + serviceJob)
var needsToQuit = false;
companion object
{
const val CHANNEL_ID = "MyForegroundServiceChannel"
const val NOTIFICATION_ID = 123456
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int
{
needsToQuit = false;
createNotificationChannel()
val notification = buildNotification("Don't kill me…")
startForeground(NOTIFICATION_ID, notification)
doSomethingPeriodically();
return START_STICKY
}
private fun doSomethingPeriodically()
{
serviceScope.launch {
while (isActive)
{
var toneGen = ToneGenerator(AudioManager.STREAM_MUSIC, 100);
toneGen.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 200);
delay(20_000)
}
}
}
private fun buildNotification(contentText: String): Notification
{
return NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("Don't kill me")
.setContentText(contentText)
.setSmallIcon(R.drawable.ic_launcher_foreground)
.build()
}
private fun createNotificationChannel()
{
val channel = NotificationChannel(
CHANNEL_ID,
"Don't kill me",
NotificationManager.IMPORTANCE_LOW
)
val manager = getSystemService(NotificationManager::class.java)
manager?.createNotificationChannel(channel)
}
override fun onBind(intent: Intent?): IBinder?
{
return null;
}
override fun onDestroy()
{
super.onDestroy()
serviceJob.cancel()
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79368750/foreground-service-with-delay-not-working-unless-other-music-app-is-playing[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия