如何解决从在 Android 11
基于 https://developer.android.com/guide/components/foreground-services#bg-access-restriction-exemptions,如果出现以下情况,我们只能在不启动应用程序(使其可见)的情况下开始在前台服务中使用相机:
- 服务由系统组件启动。
- 服务通过与应用小部件交互启动。
- 服务通过与通知交互启动。
- 服务作为从不同的可见应用发送的 PendingIntent 启动。
- 该服务由作为设备策略控制器的应用启动,该应用在设备所有者模式下运行。
- 该服务由提供 VoiceInteractionService 的应用启动。
- 该服务由具有 START_ACTIVITIES_FROM_BACKGROUND 特权权限的应用启动。
在我的情况下,我需要在没有用户交互的情况下在后台打开相机,并且当设备屏幕关闭时,在这种情况下,据我所知只有:
- 服务由系统组件启动。
- 该服务由作为设备策略控制器的应用启动,该应用在设备所有者模式下运行。
- 该服务由具有 START_ACTIVITIES_FROM_BACKGROUND 特权权限的应用启动。
系统组件 - 虽然我猜这个也不适合开发人员,因为它意味着一个系统应用程序 - 系统组件?
还有START_ACTIVITIES_FROM_BACKGROUND
怎么样,普通应用可以有这个权限吗,怎么授予?在 Android 网站上找不到关于此的任何信息
如果它也仅用于系统应用,那么唯一的选择是设备策略控制器从在 Android 11+ 后台启动的前台服务打开相机?
附言如果有人感兴趣,为什么可能需要这样的功能。仪表板相机应用程序需要它。用户在他们的车里有一部智能手机,例如,当他们打开手机(如果它没有通电)时,他们希望无需他们的交互即可自动开始视频录制。
所以它会像真正的行车记录仪一样在所有情况下自动开始录制
但 Android 11 带来了这些限制...
解决方法
这在 Android 11 及更高版本中似乎不再可能(理由很充分!)。有可能的是,一旦设备连接到车载或车载收音机(通过蓝牙,您可以注册一个 BroadcastReceiver,它通过操作 filter
监听意图),您发布本地通知。用户可以通过与通知交互来启动前台服务。