"Permission denied" 在 ON_BOOT_RECEIVED 之后尝试录制音频时(Android 11)

"Permission denied" when trying to record audio after ON_BOOT_RECEIVED (Android 11)

我有一个 android 应用程序,它 运行 是一个录制音频的前台服务。为此,我使用了一个 AudioRecord 对象,我这样初始化:

this.audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, sampRate, rec_channel_code, _encoding, BUFFER_SIZE);

该应用还配置为 运行 在 BOOT_COMPLETED 上自动配置。

当我通过按下图标或从 Android Studio 手动 运行 应用程序时,一切正常,音频已录制且没有问题 - 所以我知道我正在打开正确记录,我有权限做。

问题是,当应用程序 运行 在启动后自动运行时,它根本无法运行。我收到几条错误消息,第一条是:

permission denied: recording not allowed for uid 10388 pid 7413

然后是这些,可能是权限错误的结果:

E/AudioRecord: createRecord_l(0): AudioFlinger could not create record track, status: -1
E/AudioRecord-JNI: Error creating AudioRecord instance: initialization check failed with status -1.
E/android.media.AudioRecord: Error code -20 when initializing native AudioRecord object.

如果我随后停止该服务并再次手动 运行 它,它可以正常工作。它甚至不要求权限,因为它已经有了权限。

我是 运行ning Android 11,但我不知道以前的版本是否会出现这种情况。

所以我想我的问题是,是否可以从启动时自动 运行 的前台服务录制音频?如果是,我该如何实现?

到目前为止我尝试过的事情:

如有任何帮助,我们将不胜感激, 谢谢!

进一步研究,似乎documentation,根本不可能。

To help protect user privacy, Android 11 (API level 30) introduces limitations to when a foreground service can access the device's location, camera, or microphone. When your app starts a foreground service while the app is running in the background, the foreground service has the following limitations:

  • Unless the user has granted the ACCESS_BACKGROUND_LOCATION permission to your app, the foreground service cannot access location.
  • The foreground service cannot access the microphone or camera.

用户必须与应用程序进行某种主动交互才能让前台服务开始录制,例如显示“点击此处开始录制”的通知。