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

时间:2017-10-03 07:02:37

标签: android android-audiorecord android-security

我们正在开发直播视频应用。

所以我们需要为音频和安全提供安全保障。视频内容。

我尝试了什么

我可以限制屏幕截图&视频内容借助以下代码

  

activity.getWindow()。setFlags(WindowManager.LayoutParams.FLAG_SECURE,   WindowManager.LayoutParams.FLAG_SECURE);

但我无法通过其他应用限制录音。

如何限制其他应用录音?

1 个答案:

答案 0 :(得分:3)

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

但我认为你可以指出另一个应用程序记录音频。尝试在您的代码中使用 MediaRecorder 。 例如,您将使用Microphone( MediaRecorder.AudioSource.MIC )作为输入源创建其实例。作为MIC忙于其他应用程序的指示器,当您开始录制时,您将捕获异常( mRecorder.start() )。如果您不会捕获异常,则可以免费使用MIC硬件。所以现在没有人录制音频。 我们的想法是,每当您的应用程序进入前台时,您应该进行检查。例如,在 onResume ()或 onStart()生命周期回调中。 E.g:

@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 块只会指示MIC正忙。并且您应该要求用户停止此操作,因为它是被禁止的。并且在MIC免费之前不要恢复流式传输。

示例如何使用MediaRecorder here

正如我们在docs中看到的那样, MediaRecorder.start()会在以下情况下抛出异常:

  

<强>抛出

     

如果在prepare()之前调用它或者其他应用已经在使用相机时发生IllegalStateException。

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

  • <强>赞成

    这可以是一个有效的工具: - ))

  • <强>缺点

    您的应用应该要求 RECORD_AUDIO 权限。这可能会吓到用户。

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