"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,但我不知道以前的版本是否会出现这种情况。
所以我想我的问题是,是否可以从启动时自动 运行 的前台服务录制音频?如果是,我该如何实现?
到目前为止我尝试过的事情:
- 等待大约一分钟再打开麦克风,以防只是一些初始化错误
- 运行 激活
ForegroundService
的 Activity
,而不是服务本身,当从 BootReceiver
激活时(这样它可以在需要时再次请求权限) - 这不起作用,因为 ActivityManager 立即杀死了我的 activity
如有任何帮助,我们将不胜感激,
谢谢!
进一步研究,似乎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.
用户必须与应用程序进行某种主动交互才能让前台服务开始录制,例如显示“点击此处开始录制”的通知。
我有一个 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,但我不知道以前的版本是否会出现这种情况。
所以我想我的问题是,是否可以从启动时自动 运行 的前台服务录制音频?如果是,我该如何实现?
到目前为止我尝试过的事情:
- 等待大约一分钟再打开麦克风,以防只是一些初始化错误
- 运行 激活
ForegroundService
的Activity
,而不是服务本身,当从BootReceiver
激活时(这样它可以在需要时再次请求权限) - 这不起作用,因为 ActivityManager 立即杀死了我的 activity
如有任何帮助,我们将不胜感激, 谢谢!
进一步研究,似乎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.
用户必须与应用程序进行某种主动交互才能让前台服务开始录制,例如显示“点击此处开始录制”的通知。