You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨App启动前台Service遇SecurityException权限问题求助

排查跨App启动前台Service的权限异常

针对你遇到的java.lang.SecurityException: Not allowed to start service... without permission com.wssnps.permission.COM_WSSNPS异常,结合你的配置和代码,以下是需要排查的遗漏步骤:

1. 自定义权限的声明缺失

你在Service端的Manifest中只添加了<uses-permission>,但自定义权限必须先通过<permission>标签定义,系统才会识别这个权限。在Service所在App的Manifest中(建议放在<application>标签之前)添加:

<permission
    android:name="com.wssnps.permission.COM_WSSNPS"
    android:protectionLevel="normal" /> <!-- 根据需求选择:signature(同签名App可用)/normal(普通权限)等 -->

2. 调用方App未申请目标权限

启动Service的另一个App,必须在自己的Manifest中声明该权限:

<uses-permission android:name="com.wssnps.permission.COM_WSSNPS" />
<!-- 若目标设备是Android 12+,还需添加前台Service通知权限 -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

如果权限的protectionLevel设为signature,两个App必须使用同一签名文件打包,否则权限验证会失败。

3. Intent匹配问题

  • 你的调用代码中设置了intent.action = "someAction",但Service的Manifest中未配置对应<intent-filter>来匹配该action,可补充:
    <service ...>
        <intent-filter>
            <action android:name="someAction" />
        </intent-filter>
    </service>
    
  • 检查ComponentName的正确性:第一个参数是Service所在App的实际包名(不能用占位符pkg),第二个参数是Service的完整类名(不能用*.ServiceActivity,需替换为com.example.app.ServiceActivity这类具体路径)。

4. 前台Service的启动限制

Android 12+要求调用方App必须动态申请POST_NOTIFICATIONS权限,否则即使权限声明正确,启动前台Service也会触发异常。在调用startForegroundService()之前,需确保已获得该权限:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
    if (ContextCompat.checkSelfPermission(context, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(activity, arrayOf(Manifest.permission.POST_NOTIFICATIONS), 1001)
        // 权限申请通过后再启动Service
        return
    }
}
// 启动Service
context?.startForegroundService(intent)

内容的提问来源于stack exchange,提问作者Faysal Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 21:32:44