首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >隐式启动JobIntentService

隐式启动JobIntentService
EN

Stack Overflow用户
提问于 2018-09-24 12:18:42
回答 1查看 4.7K关注 0票数 1

如您所知,这就是我们如何发射JobIntentService的方法。

代码语言:javascript
复制
JobIntentService.enqueueWork(this,
                        MyJobIntentService.class,
                        JOB_ID, 
                        intent);

在这种方法中,我们知道要启动哪个服务并将其类传递给方法。

这里是我的问题:有任何方法来启动服务隐式吗?

为什么我需要这个?,我正在开发一个库,这个库有时应该启动开发人员扩展的服务,显然我无法从库中访问它。

,我尝试了什么?,我用IntentService实现了它(使用意图过滤器),并且在pre O设备上运行良好,但是对于Android,我收到了这个崩溃日志:

致命例外: java.lang.IllegalStateException:不允许启动服务意图{ act=someAction pkg=somePackage (有附加程序) }:app处于后台uid UidRecord{de24eda u0a238 RCVR空闲进程:1 seq(0,0,0)}

所以我搬到了JobIntentService,现在的问题是我不能隐式地启动它。

任何解决方案或替代方案都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-24 13:27:02

好的,我找到了一个解决方案,首先查询您正在寻找的服务,然后检查是否具有JobIntentService的必要权限,然后排队工作:

代码语言:javascript
复制
private final String PERMISSION_BIND_JOB_SERVICE = "android.permission.BIND_JOB_SERVICE";
Intent handlerIntent = new Intent(MY_ACTION);
List<ResolveInfo> result =
        getPackageManager().queryIntentServices(handlerIntent, 0);
            if (result.size() > 0) {
    ResolveInfo info = result.get(0);
    if (info != null && info.serviceInfo != null &&
            info.serviceInfo.permission != null){
        String permission = info.serviceInfo.permission;
        if (permission.equals(PERMISSION_BIND_JOB_SERVICE)) {
            try {
                Class<?> serviceClass = Class.forName(info.serviceInfo.name);
                JobIntentService.enqueueWork(this,
                        serviceClass,
                        JOB_ID, handlerIntent);

            } catch (ClassNotFoundException e) {
                //Handle exception if you will
            }
        }
    }
}

在应用程序模块清单中,我还将android.permission.BIND_JOB_SERVICE添加到服务中:

代码语言:javascript
复制
<service
    android:name=".MyService"
    android:enabled="true"
    android:permission="android.permission.BIND_JOB_SERVICE"
    android:exported="false">
    <intent-filter>
        <action android:name="MY_ACTION" />
    </intent-filter>
</service>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52479262

复制
相关文章

相似问题

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