未经许可不允许启动服务Intent android.permission.BIND_JOB_SERVICE
Posted
技术标签:
【中文标题】未经许可不允许启动服务Intent android.permission.BIND_JOB_SERVICE【英文标题】:Not allowed to start service Intent without permission android.permission.BIND_JOB_SERVICE 【发布时间】:2021-12-13 01:54:51 【问题描述】:我目前正在为 ATAK 开发一个插件,我需要在其中启动一些从我创建的其他模块导入的服务。但是,当我尝试启动服务时,我收到标题中所述的错误。我有点困惑,因为我创建的服务在模块本身和插件 androidManifests 中都包含 BIND_JOB_SERVICE 权限,如下所示
<service
android:name="mqtt.MqttBrokerService"
android:exported="true"
android:permission="android.permission.BIND_JOB_SERVICE">
<intent-filter>
<action android:name="mqtt.MqttBrokerService"></action>
</intent-filter>
</service>
这些代码块位于 AndroidManifest 的应用程序部分,所以这不是问题。我很傻眼,不知道为什么会发生这种情况,也不知道为什么它甚至需要这个许可,因为它不是工作服务。最重要的是我创建了一个示例应用程序,它与我的插件具有完全相同的清单,并且示例应用程序可以很好地启动服务。唯一的区别在于我的插件,我不会从主要活动中启动服务,如下所示
Intent startMqtt = new Intent("mqtt.MqttBrokerService");
startMqtt.setPackage("com.atakmap.android");
getMapView().getContext().startForegroundService(startMqtt);
【问题讨论】:
【参考方案1】:当您在清单中声明具有权限的 Service
时,这会告诉 Android 任何想要使用您的 Service
的代码都必须拥有指定的权限。您收到的错误表明某些代码正在尝试使用Service
,而该代码不拥有android.permission.BIND_JOB_SERVICE
的权限。
android.permission.BIND_JOB_SERVICE
的权限被JobScheduler
使用,所以我认为您正在尝试直接使用此Service
,而不是通过JobScheduler
。
【讨论】:
以上是关于未经许可不允许启动服务Intent android.permission.BIND_JOB_SERVICE的主要内容,如果未能解决你的问题,请参考以下文章
Android 8.0:java.lang.IllegalStateException:不允许启动服务 Intent
FCM 致命异常:java.lang.IllegalStateException 不允许启动服务 Intent
从用户 0 作为用户 -1 调用,未经许可 INTERACT_ACROSS_USERS 或 INTERACT_ACROSS_USERS_FULL 不允许