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

.NET MAUI实现Android设备播放简易蜂鸣音并控制时长

.NET MAUI Android平台实现可控时长系统蜂鸣音

解决方案:使用ToneGenerator实现精确控制

RingtoneManager仅适用于播放完整的铃声/通知音,无法精确控制播放时长,不适合摩尔斯电码训练场景。推荐使用Android原生的ToneGenerator类,它可以生成系统级蜂鸣音并支持精确启停控制。

代码实现

在页面事件或服务中添加以下代码(通过条件编译仅在Android平台生效):

private async void PlayMorseBeep(int durationMilliseconds)
{
#if ANDROID
    // 初始化ToneGenerator:指定音频流类型为音乐流,音量为100(范围0-100)
    using var toneGenerator = new Android.Media.ToneGenerator(Android.Media.Stream.Music, 100);
    
    // 选择系统蜂鸣音类型,可根据需求替换为其他Tone枚举值
    var beepTone = Android.Media.Tone.CdmaPropBeep;
    
    // 启动蜂鸣音
    if (toneGenerator.StartTone(beepTone))
    {
        // 等待指定时长后停止蜂鸣
        await Task.Delay(durationMilliseconds);
        toneGenerator.StopTone();
    }
#endif
}

关键说明

  • Tone类型选择:可以根据需求替换CdmaPropBeep为其他系统蜂鸣音,例如:
    • Tone.CdmaAlertCallGuard:短促提示音
    • Tone.Dtmf0:DTMF拨号音0(类似蜂鸣)
    • ToneGenerator.ToneCustom:自定义频率(需API 21+,如传入800Hz:StartTone(ToneGenerator.ToneCustom, 800))
  • 资源释放:使用using语句确保ToneGenerator在使用后被正确释放,避免音频资源泄漏
  • 时长控制:通过Task.Delay实现精确的蜂鸣时长控制,完全匹配摩尔斯电码的短点(通常100ms)、长划(通常300ms)需求

替代方案(仅短音效场景)

如果仅需播放固定时长的系统短音效,可使用AudioManager的PlaySoundEffect方法,但该方法无法主动停止音效,仅适用于时长较短的场景:

private async void PlayShortBeep()
{
#if ANDROID
    var audioManager = (Android.Media.AudioManager)Microsoft.Maui.ApplicationModel.Platform.CurrentActivity
        .GetSystemService(Android.Content.Context.AudioService);
    // 播放系统点击音效
    audioManager.PlaySoundEffect(Android.Media.SoundEffectKey.Click);
#endif
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 08:10:19