You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native安卓应用:如何阻止或检测录音行为?

React Native Android 阻止应用音频被录制的实现方案

针对安卓平台阻止敏感视频音频被录制的需求,目前没有直接可用的React Native第三方库,需要通过编写安卓原生模块结合系统API实现,核心思路是抢占音频焦点并切换音频模式,阻止其他应用获取录音权限。

实现步骤

1. 编写安卓原生模块

创建两个Java类,分别实现核心功能和模块注册:

AudioBlockModule.java(核心功能实现)

package com.your_app_package; // 替换为你的应用包名

import android.content.Context;
import android.media.AudioManager;
import android.media.AudioFocusRequest;
import android.media.AudioManager.OnAudioFocusChangeListener;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;

public class AudioBlockModule extends ReactContextBaseJavaModule {
    private AudioManager audioManager;
    private AudioFocusRequest focusRequest;

    public AudioBlockModule(ReactApplicationContext reactContext) {
        super(reactContext);
        audioManager = (AudioManager) reactContext.getSystemService(Context.AUDIO_SERVICE);
        
        // 监听音频焦点变化,确保焦点被持续抢占
        OnAudioFocusChangeListener focusChangeListener = focusChange -> {
            if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) {
                audioManager.requestAudioFocus(focusRequest);
            }
        };

        // 构建独占式音频焦点请求
        focusRequest = new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE)
                .setOnAudioFocusChangeListener(focusChangeListener)
                .build();
    }

    @Override
    public String getName() {
        return "AudioBlock"; // RN端调用的模块标识名
    }

    @ReactMethod
    public void startBlockRecording() {
        // 请求独占音频焦点
        int result = audioManager.requestAudioFocus(focusRequest);
        if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
            // 切换到通话模式,系统会优先占用麦克风,阻止其他应用录音
            audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
        }
    }

    @ReactMethod
    public void stopBlockRecording() {
        // 释放音频焦点,恢复系统正常音频模式
        audioManager.abandonAudioFocusRequest(focusRequest);
        audioManager.setMode(AudioManager.MODE_NORMAL);
    }
}

AudioBlockPackage.java(模块注册)

package com.your_app_package; // 替换为你的应用包名

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import java.util.ArrayList;
import java.util.List;

public class AudioBlockPackage implements ReactPackage {
    @Override
    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
        List<NativeModule> modules = new ArrayList<>();
        modules.add(new AudioBlockModule(reactContext));
        return modules;
    }

    @Override
    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
        return new ArrayList<>();
    }
}

2. 注册原生模块

在MainApplication.java中添加自定义包:

@Override
protected List<ReactPackage> getPackages() {
    List<ReactPackage> packages = new PackageList(this).getPackages();
    // 添加音频阻止模块包
    packages.add(new AudioBlockPackage());
    return packages;
}

3. React Native端调用

在需要阻止录音的场景(比如敏感视频播放前)调用原生模块方法:

import { NativeModules, AppState, useEffect } from 'react-native';

const { AudioBlock } = NativeModules;

// 启动音频录制阻止
const startAudioProtection = () => {
  AudioBlock.startBlockRecording();
};

// 停止音频录制阻止
const stopAudioProtection = () => {
  AudioBlock.stopBlockRecording();
};

// 监听应用状态,后台时自动停止保护,避免影响系统音频功能
useEffect(() => {
  const appStateListener = AppState.addEventListener('change', nextAppState => {
    if (nextAppState === 'background') {
      stopAudioProtection();
    }
  });

  return () => {
    appStateListener.remove();
    stopAudioProtection();
  };
}, []);

关键说明

  • 原理:通过请求独占式音频焦点并切换到MODE_IN_COMMUNICATION模式,系统会将麦克风资源优先分配给当前应用,其他录音应用无法获取录音权限。
  • 权限:无需额外申请RECORD_AUDIO权限,因为我们只是抢占焦点而非主动录音。
  • 兼容性:适配安卓6.0+,部分定制ROM可能存在差异,需多设备测试。
  • 注意事项:应用退后台时必须释放音频焦点,避免干扰系统其他音频功能。

内容的提问来源于stack exchange,提问作者Sherbiny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 12:02:02