【发布时间】:2022-01-03 10:35:45
【问题描述】:
我有一个运行记录音频的前台服务的 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.
如果我停止服务并再次手动运行它,它工作正常。它甚至不请求权限,因为它已经有了权限。
我运行的是 Android 11,但我不知道在以前的版本中是否会发生这种情况。
所以我想我的问题是,是否可以从启动时自动运行的前台服务录制音频?如果是,我该如何实现?
到目前为止我尝试过的事情:
- 在打开麦克风之前等待大约一分钟,以防只是一些初始化错误
- 从
BootReceiver激活时,运行Activity激活ForegroundService,而不是服务本身(因此如果需要,它可以再次请求权限) - 这不起作用,因为 ActivityManager 会杀死我立即活动
任何帮助将不胜感激, 谢谢!
【问题讨论】:
标签: android android-studio android-11