未经许可不允许启动服务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

无法恢复活动:不允许启动服务 Intent,应用程序在后台

如何在Android中未经许可阅读接收短信

FCM 致命异常:java.lang.IllegalStateException 不允许启动服务 Intent

从用户 0 作为用户 -1 调用,未经许可 INTERACT_ACROSS_USERS 或 INTERACT_ACROSS_USERS_FULL 不允许

android 在5.0以后不允许使用隐式Intent方式来启动Service