如何在Android中禁用录音应用程序

如何在Android中禁用录音应用程序,android,android-audiorecord,android-security,Android,Android Audiorecord,Android Security,我们正在开发实时流媒体视频应用程序 因此,我们需要为音频和视频内容提供安全保护 我所尝试的 我能够通过以下代码限制屏幕截图和视频内容 activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_安全, WindowManager.LayoutParams.FLAG_安全) 但我不能通过其他应用程序限制音频录制 如何限制其他应用程序的音频录制?我从未听说Android中有这样的官方工具可以简化这一过程 但我认为你可以指出另一个应用程序

我们正在开发实时流媒体视频应用程序

因此,我们需要为音频和视频内容提供安全保护

我所尝试的

我能够通过以下代码限制屏幕截图和视频内容

activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_安全, WindowManager.LayoutParams.FLAG_安全)

但我不能通过其他应用程序限制音频录制


如何限制其他应用程序的音频录制?

我从未听说Android中有这样的官方工具可以简化这一过程

但我认为你可以指出另一个应用程序记录音频。请尝试在代码中使用MediaRecorder。 例如,您将使用麦克风(MediaRecorder.AudioSource.MIC)作为输入源创建其实例。当你们开始录音时(mRecorder.start()),你们将捕捉到异常,这表明麦克风正被其他应用程序占用。当麦克风硬件可以自由使用时,若您无法捕获异常。所以现在没有人录音了。 这个想法是,每次你的应用程序出现在前台时,你都应该进行检查。例如,在onResume()或onStart()生命周期回调中。例如:

@Override
protected void onResume() {
  super.onResume();
  ...
  boolean isMicFree = true;
  MediaRecorder recorder = new MediaRecorder();
  recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
  recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
  recorder.setOutputFile("/dev/null");
  recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
  ...
  // Configure MediaRecorder
  ...
  try {
      recorder.start();
  } catch (IllegalStateException e) {
      Log.e("MediaRecorder", "start() failed: MIC is busy");

      // Show alert dialogs to user.
      // Ask him to stop audio record in other app.
      // Stay in pause with your streaming because MIC is busy.

      isMicFree = false;
  }

  if (isMicFree) {
    Log.e("MediaRecorder", "start() successful: MIC is free");
    // MIC is free.
    // You can resume your streaming.
  }
  ...
  // Do not forget to stop and release MediaRecorder for future usage
  recorder.stop();
  recorder.release();
}

// onWindowFocusChanged will be executed
// every time when user taps on notifications
// while your app is in foreground.

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    // Here you should do the same check with MediaRecorder.
    // And you can be sure that user does not
    // start audio recording through notifications.
    // Or user stops recording through notifications.
}
您的代码将无法限制其他应用程序录制。您的try-catch块将仅指示麦克风正忙。您应该要求用户停止此操作,因为它是被禁止的。在麦克风空闲之前不要恢复流媒体

如何使用MediaRecorder的示例如下

正如我们在中所看到的,MediaRecorder.start()在以下情况下引发异常:

投掷

IllegalStateException,如果在prepare()之前调用,或者当相机已被其他应用程序使用时调用

我在样本中尝试了这个想法。当一个应用程序获得麦克风时,另一个应用程序无法使用麦克风

  • 专业人士

    这可以是一个工作工具:-)

  • 缺点

    你的应用程序应该请求录制音频许可。这可能会吓到用户


我想重申,这只是一个想法。

我认为这既不可能,也没有用处。如果用户使用外部录音设备录制音频怎么办?@nabinhandari外部设备我们不在乎。我们至少要提供一些证券。这就是问题的原因。如果你的应用程序在后台播放,你无法阻止应用程序录制你的音频。@JoxTraex当它转到后台时,我们暂停播放器。我们只想限制前台的音频,我刚才试过你的代码。两个异常都被调用。但我不知道我们在这个例外区做什么。实现了这个代码后,仍然可以录制声音。顺便问一下,这是你的情况吗?是否还要限制从麦克风录制?是。我想限制我的应用程序中的所有音频录制。另外,我认为如果另一个应用程序已经在录制,这将不起作用。@EndreBörcsök,是的,没错!当我编辑它的时候,我试着回答这个问题。我说有迹象表明另一个应用程序已经在录制