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

Android使用USB web camera时无法启用设备麦克风相关问题咨询

Android USB摄像头占用音频通道/内置麦克风无法调用解决方案

优先选择应用层强制指定内置麦克风的方案,无需修改系统设置,普通三方应用即可实现。

方案1:应用层强制路由音频输入到内置麦克风

  • 权限配置:在Manifest中声明必选权限
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <!-- Android 12+ 如需访问USB设备可额外添加,不需要可忽略 -->
    <uses-permission android:name="android.permission.HOST_USB" />
    
  • 运行时筛选内置麦克风设备,Android 10及以上可直接指定偏好输入设备,示例代码如下:
    AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    AudioDeviceInfo[] allInputDevices = audioManager.getDevices(AudioManager.GET_DEVICES_INPUTS);
    AudioDeviceInfo builtInMic = null;
    // 筛选类型为内置麦克风的音频输入设备
    for (AudioDeviceInfo device : allInputDevices) {
        if (device.getType() == AudioDeviceInfo.TYPE_BUILTIN_MIC) {
            builtInMic = device;
            break;
        }
    }
    if (builtInMic != null) {
        // 构建指定用内置麦克风的AudioRecord实例
        AudioRecord audioRecord = new AudioRecord.Builder()
                .setAudioSource(MediaRecorder.AudioSource.VOICE_RECOGNITION)
                .setAudioFormat(new AudioFormat.Builder()
                        .setEncoding(AudioFormat.ENCODING_PCM_16BIT)
                        .setSampleRate(16000)
                        .setChannelMask(AudioFormat.CHANNEL_IN_MONO)
                        .build())
                .setPreferredDevice(builtInMic)
                .build();
        // 自行采集音频流输入到Google Speech To Text SDK即可,不要使用SDK默认的音频采集逻辑
    }
    
  • Android 9及以下兼容方案:使用已废弃的setRouting方法强制切换音频路由
    audioManager.setRouting(AudioManager.MODE_IN_COMMUNICATION, AudioManager.ROUTE_SPEAKER, AudioManager.ROUTE_ALL);
    

方案2:代码修改开发者选项「Disable USB audio routing」开关

该方案需要特殊权限,仅适合系统预装应用、ROOT设备或者可引导用户手动授权的场景,开关全局生效会影响所有应用的USB音频使用。

  • 权限要求:需要android.permission.WRITE_SECURE_SETTINGS权限,普通应用可通过adb命令手动授权:
    adb shell pm grant 你的应用包名 android.permission.WRITE_SECURE_SETTINGS
    
    系统签名应用可直接在Manifest中声明该权限。
  • 修改开关代码:
    // 1代表开启Disable USB audio routing,0代表关闭
    Settings.Secure.putInt(getContentResolver(), "usb_audio_disable_routing", 1);
    

注意:部分厂商定制ROM修改了原生音频路由逻辑,上述方案可能需要针对特定机型做适配。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 05:54:02