Android 12 系统下的应用程序将不会在后台服务状态下启动前台服务。
不过有几种情况可以例外,如果不满足例外的情况下,当应用从后台服务要启动一个前台服务,系统就会抛出一个IllegalStateException
异常。
关于前台服务
对于应用在后台启动的服务
在android 11或更高的版本中,如果你的应用从后台服务启动了一个前台服务,那么服务会有以下的访问限制:
1、除非用户给你的应用允许了ACCESS_BACKGROUND_LOCATION 权限,否则服务不可以访问定位;
2、
服务不可以访问麦克风和摄像头。
使用定位或者摄像头的服务
<manifest>
...
<service ...
android:foregroundServiceType="location|camera|microphone" />
</manifest>
可以被豁免的几种例外情况:猫和老鼠
在某些情况下,尽管一个前台服务在后台状态下启动,当应用在前台状态下运行的时候,也就是在用户可见的情况下使用时,它仍然能够访问定位、相机、麦克风信息。在这些相同的场景下,如果服务被声明为一个用于定位的前台服务类型并且被一个有ACCESS_BACKGROUND_LOCATION
权限的应用启动,这个服务就可以一直访问位置信息,尽管应用仍然在后台运行。
这些例外情况有:
1、服务由系统组件启动
2、服务由桌面微件AppWidget交互
3、服务与一个通知交互
4、服务作为一个PendingIntent启动并且发送到不同的可见的应用(????)
5、服务被运行于设备拥有者模式的设备策略控制器启动
6、服务被提供了VoiceInteractionService的应用启动
7、服务被拥有START_ACTIVITIES_FROM_BACKGROUND特权的应用启动