我创建了一个JobIntentSerivce,在MyService类的清单文件中,我没有指定BIND_JOB_SERVICE权限。因此,当我为此服务排队时,它会抛出运行时错误“ MyService不需要android.permission.BIND_JOB_SERVICE权限”。如果我将权限授予Android清单中的MyService,它将解决此问题。但是我的疑问是,为什么显示“不需要许可”的错误,是错字还是背后的逻辑原因?
答案 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) { .. }
在此方法中,它肯定会检查Service
(JobInfo
)中的jobinfo.getService()
是否具有BIND_JOB_SERVICE
的权限-如果未抛出错误,对我来说是一个误导性消息。它还检查只有系统或应用程序uid才能入队,这显然是出于安全原因。