首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用JobIntentService调度警报

无法使用JobIntentService调度警报
EN

Stack Overflow用户
提问于 2018-10-29 15:46:00
回答 1查看 1.4K关注 0票数 2

我一直在研究如何安排一个警报瞄准装置奥利奥+。我目前的方法是使用AlarmManager,一种铃声服务和广播接收器。我得到警报响和显示通知,但通知和警报不触发奥利奥+设备。

由于JobIntentService和其他背景的限制,我了解到使用Doze是一个很好的实践。目前,在使用JobIntentService时,我会得到一个错误:

java.lang.RuntimeException:执行doInBackground()时发生错误

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

代码语言:javascript
复制
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
    }
}
EN

回答 1

Stack Overflow用户

发布于 2018-10-29 18:13:58

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

代码语言:javascript
复制
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/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53049133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档