Как создать службу переднего плана, используя метод setForeground?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как создать службу переднего плана, используя метод setForeground?

Сообщение Anonymous »

Я хочу создать службу переднего плана, которая будет работать в течение длительного периода времени и не будет перенесена в кэшированный процесс, в котором ее можно будет завершить, когда потребуется память. Согласно документации:

Процессы, которые необходимо запускать в течение длительного периода, можно создать с помощью setForeground.

Поэтому я решил использовать этот метод для создания службы переднего плана. Вот что я сделал:
MainActivity.kt

Код: Выделить всё

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

val request = OneTimeWorkRequest.Builder(MyWorker::class.java).build()
WorkManager.getInstance(this).enqueue(request)

setContent {
Text("The app is now running")
}
}
}
MyWorker.kt

Код: Выделить всё

class MyWorker(context: Context, parameters: WorkerParameters):
CoroutineWorker(context, parameters) {
override suspend fun doWork(): Result {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channel = NotificationChannel(
"1",
"MAIN",
NotificationManager.IMPORTANCE_HIGH
)
val notificationManager = applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(channel)
}

val notification = NotificationCompat.Builder(applicationContext,"1")
.setSmallIcon(R.drawable.ic_launcher_background)
.setContentTitle("The test app is running")
.build()

val x = if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
ForegroundInfo(1, notification, ServiceInfo.FOREGROUND_SERVICE_TYPE_SPECIAL_USE)
} else {
ForegroundInfo(1, notification)
}
setForeground(x)
return Result.success()
}
}
AndroidManifest.xml

Код: Выделить всё

...

...
После запуска этого приложения ничего не происходит. Почему? Правильно ли я начинаю рабочий запрос? Должен ли я всегда устанавливать имя службы в манифесте как androidx.work.impl.foreground.SystemForegroundService? Могу ли я реализовать свой собственный класс обслуживания, когда таким образом запускаю службу переднего плана?

Подробнее здесь: https://stackoverflow.com/questions/785 ... und-method
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»