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

使用Plugin.Messaging发送SMS,如何阻止消息在发送设备中显示?

问题解答

核心结论

非默认短信应用无法隐藏发送的SMS记录,这是Android系统从4.4版本开始的权限限制导致的。

原因分析

你当前使用Plugin.Messaging的SendSmsInBackground方法,本质是调用Android系统的SMS发送API。系统会自动将所有通过该API发送的短信写入系统短信数据库(content://sms),而只有默认短信应用拥有WRITE_SMS权限,能修改或删除这个数据库里的记录。非默认应用没有这个权限,所以发送的短信必然会出现在系统短信应用中。

现有方案的体验优化

如果必须通过系统SMS API实现批量发送且隐藏记录,只能引导用户将你的应用设为默认短信应用,不过可以优化这个流程:

  • 发送前检测当前默认短信应用并保存,发送完成后主动提示用户恢复原默认应用
  • 提供清晰的步骤指引(比如跳转至系统设置页面),减少用户操作成本
    但即便如此,体验还是会比较繁琐,尤其是需要频繁批量发送的场景。

替代方案(推荐)

改用运营商短信网关/第三方短信服务平台发送短信:

  • 这类服务通过HTTP/HTTPS接口直接发送短信,不经过Android系统的SMS模块,自然不会在系统短信应用中留下记录
  • 不需要申请系统短信权限,也不用设置为默认应用
  • 缺点是需要对接第三方服务,可能产生费用,且需要处理接口鉴权、发送状态回调等逻辑

你的代码补充说明

你当前的发送代码本身是正常的,但无法解决隐藏短信记录的问题:

public async void SendSMS(string pMessage, string pPhoneNumber)
{
    try
    {
        var smsMessenger = CrossMessaging.Current.SmsMessenger;
        if (smsMessenger.CanSendSmsInBackground)
            smsMessenger.SendSmsInBackground(pPhoneNumber, pMessage);
    }
    catch (Exception ex)
    {
        Utils.LogError("App: OMLAndroid (TextMessage.cs) - An error occurred when trying to send a text, the error is: " + ex.Message);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:50:27