如何在 Android 中禁用录音应用程序
How to disable audio recording apps in Android
我们正在开发直播视频应用程序。
因此我们需要为音频和视频内容提供安全保障。
我试过的
我可以借助以下代码限制屏幕截图和视频内容
activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE);
但我无法通过其他应用程序限制录音。
如何限制其他应用录音?
我从未听说 Android 中有这样的官方工具可以简化此过程。
但我认为您可以指示另一个应用程序录制音频。为此,请尝试在您的代码中使用 MediaRecorder。
例如,您将使用麦克风 (MediaRecorder.AudioSource.MIC) 作为输入源创建其实例。作为 MIC 正忙于其他应用程序的指示器,当您开始录音时,您将捕获异常 (mRecorder.start())。如果您不会捕获异常,则可以免费使用 MIC 硬件。所以现在没有人在录制音频。
这个想法是你应该在每次你的应用程序进入前台时进行检查。例如在 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 块将仅指示 MIC 正忙。并且您应该要求用户停止此操作,因为它是被禁止的。在 MIC 空闲之前不要恢复流式传输。
如何使用 MediaRecorder 的示例是 here。
正如我们在 docs 中看到的那样,MediaRecorder.start() 在以下情况下抛出异常:
Throws
IllegalStateException if it is called before prepare() or when the camera is already in use by another app.
我在示例中尝试了这个想法。当一个应用程序获取 MIC 时,另一个应用程序无法使用 MIC。
优点:
这可以成为一个工作工具:-))
缺点:
您的应用应请求 RECORD_AUDIO 许可。这会吓到用户。
我想再说一遍,这只是一个想法。
我们正在开发直播视频应用程序。
因此我们需要为音频和视频内容提供安全保障。
我试过的
我可以借助以下代码限制屏幕截图和视频内容
activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
但我无法通过其他应用程序限制录音。
如何限制其他应用录音?
我从未听说 Android 中有这样的官方工具可以简化此过程。
但我认为您可以指示另一个应用程序录制音频。为此,请尝试在您的代码中使用 MediaRecorder。 例如,您将使用麦克风 (MediaRecorder.AudioSource.MIC) 作为输入源创建其实例。作为 MIC 正忙于其他应用程序的指示器,当您开始录音时,您将捕获异常 (mRecorder.start())。如果您不会捕获异常,则可以免费使用 MIC 硬件。所以现在没有人在录制音频。 这个想法是你应该在每次你的应用程序进入前台时进行检查。例如在 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 块将仅指示 MIC 正忙。并且您应该要求用户停止此操作,因为它是被禁止的。在 MIC 空闲之前不要恢复流式传输。
如何使用 MediaRecorder 的示例是 here。
正如我们在 docs 中看到的那样,MediaRecorder.start() 在以下情况下抛出异常:
Throws
IllegalStateException if it is called before prepare() or when the camera is already in use by another app.
我在示例中尝试了这个想法。当一个应用程序获取 MIC 时,另一个应用程序无法使用 MIC。
优点:
这可以成为一个工作工具:-))
缺点:
您的应用应请求 RECORD_AUDIO 许可。这会吓到用户。
我想再说一遍,这只是一个想法。