我一直在研究如何安排一个警报瞄准装置奥利奥+。我目前的方法是使用AlarmManager,一种铃声服务和广播接收器。我得到警报响和显示通知,但通知和警报不触发奥利奥+设备。
由于JobIntentService和其他背景的限制,我了解到使用Doze是一个很好的实践。目前,在使用JobIntentService时,我会得到一个错误:
java.lang.RuntimeException:执行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
}
}发布于 2018-10-29 18:13:58
您可以尝试将支持库更新为最新的和最大的,并将一些数字>1(以避免具有相同Id的两个不同的意图服务)。如果它没有帮助,您可能想深入到这个兔子洞: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) {
}
}
}
}或者,您可以尝试使用来自体系结构组件的新WorkManager (如果应用程序中有一个应用程序小部件(用于android主屏幕的应用程序小部件),则可能会出现问题)。https://developer.android.com/topic/libraries/architecture/workmanager/
https://stackoverflow.com/questions/53049133
复制相似问题