【问题标题】:"Permission denied" when trying to record audio after ON_BOOT_RECEIVED (Android 11)尝试在 ON_BOOT_RECEIVED (Android 11) 之后录制音频时出现“权限被拒绝”
【发布时间】: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


    【解决方案1】:

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

    为帮助保护用户隐私,Android 11(API 级别 30)对前台服务何时可以访问设备的位置、摄像头或麦克风引入了限制。当您的应用在后台运行时启动前台服务时,前台服务有以下限制:

    • 除非用户已将 ACCESS_BACKGROUND_LOCATION 权限授予您的应用,否则前台服务无法访问位置。
    • 前台服务无法访问麦克风或摄像头

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-30
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 2021-01-01
      • 2021-01-15
      • 1970-01-01
      • 2016-05-19
      相关资源
      最近更新 更多