SecurityException: Not allowed to start service Intent

第三方app 调用远程service 时,如果 manifest.xml 中service 节中为配置 intent-filter 节点,就会报

SecurityException: Not allowed to start service Intent  // SecurityException: Not allowed to bind service Intent

 

正确调用如下:

 

<service android:name="AlizeRecognitionService">
<intent-filter >

<action android:name="com.bime.alizerecognition.AlizeRecognitionService"/>
</intent-filter>

</service>

 

如果只是下面这样,在本app中调用该service 是没问题的,给第三方app调用就会报上述错误,相当于一种隐式的权限公开声明

 

<service android:name="AlizeRecognitionService">

</service>

03-12 19:05:45.149904 29300 29389 W System.err: java.lang.SecurityException: Not allowed to start service Intent { act=onetrack.action.TRACK_EVENT flg=0x2 pkg=com.miui.analytics (has extras) } without permission com.miui.analytics.onetrack.TRACK_EVENT 03-12 19:05:45.149965 29300 29389 W System.err: at android.app.ContextImpl.startServiceCommon(ContextImpl.java:2041) 03-12 19:05:45.149971 29300 29389 W System.err: at android.app.ContextImpl.startService(ContextImpl.java:2002) 03-12 19:05:45.149992 29300 29389 W System.err: at android.content.ContextWrapper.startService(ContextWrapper.java:866) 03-12 19:05:45.150001 29300 29389 W System.err: at com.android.bluetooth.util.OneTrackInterfaceUtil.track(OneTrackInterfaceUtil.java:212) 03-12 19:05:45.150008 29300 29389 W System.err: at com.android.bluetooth.util.OneTrackInterfaceUtil.trackTwsHeadset(OneTrackInterfaceUtil.java:1380) 03-12 19:05:45.150013 29300 29389 W System.err: at com.android.bluetooth.hfp.HeadsetService.onConnectionStateChangedFromStateMachine(HeadsetService.java:3419) 03-12 19:05:45.150018 29300 29389 W System.err: at com.android.bluetooth.hfp.HeadsetStateMachine$HeadsetStateBase.broadcastConnectionState(HeadsetStateMachine.java:972) 03-12 19:05:45.150023 29300 29389 W System.err: at com.android.bluetooth.hfp.HeadsetStateMachine$HeadsetStateBase.broadcastStateTransitions(HeadsetStateMachine.java:954) 03-12 19:05:45.150030 29300 29389 W System.err: at com.android.bluetooth.hfp.HeadsetStateMachine$Connected.enter(HeadsetStateMachine.java:2035) 03-12 19:05:45.150035 29300 29389 W System.err: at com.android.bluetooth.x.com.android.internal.util.StateMachine$SmHandler.invokeEnterMethods(StateMachine.java:1043) 03-12 19:05:45.150040 29300 29389 W System.err: at com.android.bluetooth.x.com.android.internal.util.StateMachine$SmHandler.performTransitions(StateMachine.java:889) 03-12 19:05:45.150044 29300 29389 W System.err: at com.android.bluetooth.x.com.android.internal.util.StateMachine$SmHandler.handleMessage(StateMachine.java:829) 03-12 19:05:45.150050 29300 29389 W System.err: at android.os.Handler.dispatchMessage(Handler.java:109) 03-12 19:05:45.150056 29300 29389 W System.err: at android.os.Looper.loopOnce(Looper.java:249) 03-12 19:05:45.150061 29300 29389 W System.err: at android.os.Looper.loop(Looper.java:337) 03-12 19:05:45.150065 29300 29389 W System.err: at android.os.HandlerThread.run(HandlerThread.java:85) 03-12 19:05:45.150167 29300 29300 D SilenceDeviceManager: handleMessage: 11解释下这段日志
最新发布
04-09
当非系统应用尝试绑定到具有`android.uid.system`权限的服务时,会收到`SecurityException`,因为这样做通常是为了访问系统的功能,而普通应用并不具备这样的权限。这个异常通常是Android操作系统为了保障安全性和隐私控制而设计的。 解决这个问题通常有以下几个步骤: 1. **权限检查**:确保你的应用在运行时获得了正确的权限。对于需要`android.uid.system`权限的服务操作,你需要在AndroidManifest.xml文件中添加相应的`<uses-permission>`标签,并在运行时通过`PackageManager`检查当前应用是否拥有该权限。 ```xml <uses-permission android:name="android.permission.BIND_SERVICE" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <!-- 如果服务需要显示系统通知 --> ``` 2. **申请权限**:如果应用在运行时没有这些权限,可以在代码中动态请求它们,例如使用`ActivityCompat.requestPermissions()`。 3. **特殊授权**:某些系统服务可能需要用户明确授予应用权限才能绑定。在这种情况下,你需要引导用户通过设置或权限管理界面进行手动授权。 4. **服务代理**:如果业务上确实需要,可以考虑创建一个中间服务作为桥梁,由系统服务提供者负责处理实际任务,然后将结果返回给你的应用,而不是直接绑定。 5. **使用IntentService**: 考虑使用`IntentService`来间接实现服务,这种方式可以避免直接绑定,同时保持一定的响应能力。 记住,滥用系统权限可能会导致应用被拒,因此一定要确保你的需求合理并且遵守Google Play Store的政策。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值