在Android 11中在后台访问麦克风/摄像头

问题描述

Microphone中停止了在后台访问Android 11。只有3个选项:“使用时允许”,“允许一次”和“拒绝”。

如何在Android 11中使应用程序始终在后台访问麦克风?有什么解决方法吗?

解决方法

新的Android开发者政策限制了在后台访问麦克风和摄像头。

使用Accessibility Service仍可以在后台使用该功能。但是,通知将始终打开。

,

要访问Android 11中的背景麦克风/摄像头/位置,Android提供了一些豁免,您需要限定以下条件之一:

引用:https://developer.android.com/guide/components/foreground-services#restrictions-exemptions

使用中限制的豁免:

在以下情况之一中启动前台服务时,该服务不受在使用中对位置,摄像头和麦克风的访问限制:

该服务由系统组件启动。

该服务是通过与应用小部件进行交互来启动的。

通过与通知进行交互来启动服务。

该服务作为从其他可见应用程序发送的PendingIntent启动。

该服务由运行在设备所有者模式下的设备策略控制器的应用程序启动。

该服务由提供VoiceInteractionService的应用启动。

该服务由具有START_ACTIVITIES_FROM_BACKGROUND特权的应用程序启动。

,

现在我们必须为我们的前台服务 (https://developer.android.com/guide/components/foreground-services#types) 指定一个类型:

<manifest>
    ...
    <service ...
        android:foregroundServiceType="camera|microphone" />
</manifest>

但在某些情况下,即使我们指定了 android:foregroundServiceType,我们的前台服务仍然无法访问摄像头或麦克风:

如果前台服务在应用程序处于后台时启动(对用户不可见 - 没有可见活动),例如在设备启动 (BOOT_COMPLETED) 广播时,则此类服务无法开始使用摄像头、麦克风

如果在应用程序处于前台时启动了前台服务(对用户可见 - 一些可见的活动),则该服务可以开始使用摄像头、麦克风

信息来自:https://developer.android.com/guide/components/foreground-services#bg-access-restrictions

我的问题 Camera2 cameraManager.openCamera exception from time to time on some devices