Android JobIntentService权限错误

时间:2018-09-06 11:41:43

标签: android

我创建了一个JobIntentSerivce,在MyService类的清单文件中,我没有指定BIND_JOB_SERVICE权限。因此,当我为此服务排队时,它会抛出运行时错误“ MyService不需要android.permission.BIND_JOB_SERVICE权限”。如果我将权限授予Android清单中的MyService,它将解决此问题。但是我的疑问是,为什么显示“不需要许可”的错误,是错字还是背后的逻辑原因?

2 个答案:

答案 0 :(得分:0)

JobIntentService必须受到BIND_JOB_SERVICE权限的保护,但是在清单中添加权限时,将android:exported设置为true将解决此令人困惑的错误,例如

<service android:name="com.example.jobscheduler.MyService"
        android:permission="android.permission.BIND_JOB_SERVICE"
        android:exported="true"/>

答案 1 :(得分:0)

在源头上查看方法enforceValidJobRequest(int uid, JobInfo job)中的JobSchedulerStub的注释确实可以解释其检查内容:

JobSchedulerService.JobSchedulerStub:

// Enforce that only the app itself (or shared uid participant) can schedule a // job that runs one of the app's services, as well as verifying that the // named service properly requires the BIND_JOB_SERVICE permission private void enforceValidJobRequest(int uid, JobInfo job) { .. }

在此方法中,它肯定会检查ServiceJobInfo)中的jobinfo.getService()是否具有BIND_JOB_SERVICE的权限-如果未抛出错误,对我来说是一个误导性消息。它还检查只有系统或应用程序uid才能入队,这显然是出于安全原因。