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

.NET MAUI麦克风输入获取求助:Android平台API常量定义报错

.NET MAUI麦克风输入问题解决方案

错误原因分析

你遇到的MIC、THREE_GPP、AMR_NB常量找不到的问题,本质是.NET MAUI在绑定Android原生API时,会将Java全大写的常量名转换为符合.NET命名规范的驼峰命名。对应关系如下:

  • 原生Android MediaRecorder.AudioSource.MIC → .NET MAUI AudioSource.Mic
  • 原生Android MediaRecorder.OutputFormat.THREE_GPP → .NET MAUI OutputFormat.ThreeGpp
  • 原生Android MediaRecorder.AudioEncoder.AMR_NB → .NET MAUI AudioEncoder.AmrNb

修正后的代码片段:

using Android.Media;
using Java.Util;
using System.Diagnostics;

public static class MicIn
{
    static MediaRecorder mRecorder;

    public static void StartRecorder()
    {
        if (mRecorder == null)
        {
            mRecorder = new MediaRecorder();
            mRecorder.SetAudioSource(AudioSource.Mic);
            mRecorder.SetOutputFormat(OutputFormat.ThreeGpp);
            mRecorder.SetAudioEncoder(AudioEncoder.AmrNb);
            mRecorder.SetOutputFile("/dev/null");
            
            try
            {
                mRecorder.Prepare();
            }
            catch (Java.IO.IOException ioe)
            {
                Debug.WriteLine("IO exception: " + ioe.Message);
            }
            catch (Java.Lang.SecurityException e)
            {
                Debug.WriteLine("Security exception: " + e.Message);
            }
            
            try
            {
                mRecorder.Start();
            }
            catch (Java.Lang.SecurityException e)
            {
                Debug.WriteLine("Security exception when starting recorder: " + e.Message);
            }
        }
    }
}

.NET MAUI中获取麦克风输入的替代方案

1. 跨平台音频插件(推荐)

使用Plugin.Maui.Audio插件,它提供了跨平台的音频录制与实时数据处理能力,无需编写平台专属代码:

  • 安装NuGet包:Plugin.Maui.Audio
  • 在MauiProgram.cs中注册服务:
    builder.Services.AddAudio();
    
  • 注入IAudioManager并实现实时音量监测:
    using Plugin.Maui.Audio;
    
    public class AudioMonitor
    {
        private readonly IAudioManager _audioManager;
        private IAudioRecorder _recorder;
    
        public AudioMonitor(IAudioManager audioManager)
        {
            _audioManager = audioManager;
        }
    
        public async Task StartMonitoring()
        {
            // 请求麦克风权限
            var status = await Permissions.RequestAsync<Permissions.Microphone>();
            if (status != PermissionStatus.Granted)
            {
                Debug.WriteLine("麦克风权限未授予");
                return;
            }
    
            _recorder = _audioManager.CreateRecorder();
            _recorder.RecordingAvailable += (s, e) =>
            {
                // 处理实时音频数据,计算音量
                var audioBuffer = e.Buffer;
                // 示例:计算音频振幅(音量)
                float amplitude = CalculateAmplitude(audioBuffer);
                Debug.WriteLine($"当前音量振幅:{amplitude}");
            };
    
            await _recorder.StartAsync();
        }
    
        private float CalculateAmplitude(float[] audioBuffer)
        {
            float maxAmplitude = 0;
            foreach (var sample in audioBuffer)
            {
                maxAmplitude = Math.Max(maxAmplitude, Math.Abs(sample));
            }
            return maxAmplitude;
        }
    }
    

2. 完善平台专属代码(Android)

如果坚持使用Android原生API,除了修正常量名,还需确保权限配置完整:

  • 在Platforms/Android/AndroidManifest.xml中添加权限:
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    
  • 在运行时动态请求麦克风权限:
    var permissionStatus = await Permissions.RequestAsync<Permissions.Microphone>();
    if (permissionStatus != PermissionStatus.Granted)
    {
        // 处理权限未授予的情况
        return;
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:50:51