gpt4 book ai didi

android - 无法使用 JobIntentService 安排警报

转载 作者:行者123 更新时间:2023-11-29 00:58:13 26 4
gpt4 key购买 nike

我一直在研究如何安排针对设备 Oreo + 的警报。我目前的方法是使用 AlarmManager,一种铃声服务和广播接收器。我让闹钟响起并显示通知,但通知和闹钟不会为 Oreo + 设备触发。

由于 Doze 和其他后台限制,我了解到使用 JobIntentService 是一种很好的做法。目前,在使用 JobIntentService 时,出现错误:

java.lang.RuntimeException: An error occurred while executing doInBackground()

我做错了吗?我真的需要实现 AsyncTask 吗?

class AlarmReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
val alarmStatus: String = intent!!.getStringExtra("alarmStatus")
val serviceIntent = Intent(context, RingtoneService::class.java)
serviceIntent.putExtra("alarmStatus", alarmStatus)
//context!!.startService(serviceIntent)
RingtoneService.enqueueWork(context, serviceIntent)
}
}

class RingtoneService : JobIntentService() {
// Enqueing work to do in this service.
companion object {
val SERVICE_JOB_ID = 1

fun enqueueWork(context: Context?, work: Intent) {
if (context != null) {
enqueueWork(context, RingtoneService::class.java, RingtoneService.SERVICE_JOB_ID, work)
}
}
}

override fun onHandleWork(intent: Intent) {
onHandleIntent(intent)
}

private fun onHandleIntent(intent: Intent) {
//handling of notification goes here
}
}

最佳答案

您可以尝试将您的支持库更新到最新和最好的,并将一些数字 > 1(以避免有两个具有相同 ID 的不同 Intent 服务)。如果它没有帮助,您可能想更深入地了解这个兔子洞:https://issuetracker.google.com/issues/63622293建议的修复方法之一是在 JobIntentService 周围使用包装类:

package android.support.v4.app;

import android.content.Intent;

public abstract class FixedJobIntentService extends JobIntentService {

@Override
GenericWorkItem dequeueWork() {
try {
return new FixedGenericWorkItem(super.dequeueWork());
} catch (SecurityException ignored) {
}
return null;
}

private class FixedGenericWorkItem implements GenericWorkItem {
final GenericWorkItem mGenericWorkItem;

FixedGenericWorkItem(GenericWorkItem genericWorkItem) {
mGenericWorkItem = genericWorkItem;
}

@Override
public Intent getIntent() {
if (mGenericWorkItem != null) {
return mGenericWorkItem.getIntent();
}
return null;
}

@Override
public void complete() {
try {
if (mGenericWorkItem != null) {
mGenericWorkItem.complete();
}
} catch (IllegalArgumentException ignored) {
}
}
}
}

或者您可以尝试使用架构组件中新的 Shiny WorkManager(如果您的应用程序中有应用程序小部件(用于 Android 主屏幕的小部件,则可能会出现问题)。 https://developer.android.com/topic/libraries/architecture/workmanager/

关于android - 无法使用 JobIntentService 安排警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53049133/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com