android8.1 startService报错
场景1.存在2个app
:A和B
, A
中的service:S
,现需求为S
,在A
从未打开过的activity界面(即从未启动过)
的情况下,需要被B
通过调用startService
启动。
写法可参考这篇。
Android在一个app中启动其他app中的service或者Activity
场景2.存在1个app:A
,A
中有service:S
,现需求为S
,在A
从未打开过的activity界面(即从未启动过)
的情况下,能够开机自启动。
写法可参考这篇。
Android开机自启动服务的写法
但是,以上2种使用场景中在没有打开A的情况下,在调用startService会报错。具体错误如下。
01-07 06:35:03.341 731-753/? W/BroadcastQueue: u0 Receiving a broadcast in package xxx requires a permissions review
需要权限检查,那么就给它权限绕过权限检查。虽然Android O对startService做了限制,但是那只是针对普通进程的,可以通过添加android:sharedUserId="android.uid.system"
,将app进程升级成系统进程,然后给它签名即可。另外还有一个错误是Waited long enough for: ServiceRecord
,添加android:persistent="true"
即可。
具体添加节点如下所示。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="xxx"
android:sharedUserId="android.uid.system">
<application
..................
android:persistent="true">
</application>
</manifest>
参考链接:
Android O 后台startService限制简析
Android 8.0 加入的「Background Service Limitations」
startService过程
Waited long enough for: ServiceRecord 问题解决