如何在Android中禁用录音应用程序
我们正在开发实时流媒体视频应用程序 因此,我们需要为音频和视频内容提供安全保护 我所尝试的 我能够通过以下代码限制屏幕截图和视频内容 activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_安全, WindowManager.LayoutParams.FLAG_安全) 但我不能通过其他应用程序限制音频录制如何在Android中禁用录音应用程序,android,android-audiorecord,android-security,Android,Android Audiorecord,Android Security,我们正在开发实时流媒体视频应用程序 因此,我们需要为音频和视频内容提供安全保护 我所尝试的 我能够通过以下代码限制屏幕截图和视频内容 activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_安全, WindowManager.LayoutParams.FLAG_安全) 但我不能通过其他应用程序限制音频录制 如何限制其他应用程序的音频录制?我从未听说Android中有这样的官方工具可以简化这一过程 但我认为你可以指出另一个应用程序
如何限制其他应用程序的音频录制?我从未听说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,是的,没错!当我编辑它的时候,我试着回答这个问题。我说有迹象表明另一个应用程序已经在录制