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

华为EMUI系统下如何允许应用通过代码发送SMS?

针对EMUI系统下B4A应用无法发送SMS的解决方案

EMUI确实存在针对短信发送的特殊管控机制,结合你的问题场景,从设置和代码调整两方面给出解决思路:

一、EMUI系统特殊设置检查

  • 后台活动权限:进入「设置 > 应用和服务 > 应用管理 > 你的应用 > 电池优化」,将应用设置为「不允许」优化;同时在「应用启动管理」中关闭「自动管理」,手动开启「允许后台活动」。EMUI对后台应用的行为限制严格,即使有SEND_SMS权限,后台发送短信也可能被拦截。
  • 短信拦截与隐私设置:检查「手机管家 > 骚扰拦截 > 拦截规则」,确认是否将应用发送的短信标记为骚扰;另外在「设置 > 隐私 > 权限管理 > 权限 > 短信」中,除了确认已授予「发送短信」权限,还要检查是否开启了「读取短信」权限(部分EMUI版本需要同时拥有读写权限才能正常发送)。
  • 纯净模式/安全检测:如果设备开启了纯净模式,尝试临时关闭后测试,纯净模式会限制未通过华为应用市场验证的应用的部分敏感操作。

二、代码层面的兼容调整

B4A的PhoneSms.Send封装的是旧版SMS API,在EMUI的管控下可能无法触发发送动作,建议改用SmsManager的原生调用方式,同时添加错误捕获:

Dim SmsManager As SmsManager
Dim PhoneNumber As String = "XXXXXXXXXXXXXXX"
Dim Message As String = "Water level is .... "
Try
    SmsManager.SendTextMessage(PhoneNumber, Null, Message, Null, Null)
    Log("SMS发送请求已提交")
Catch e As Exception
    Log("发送异常: " & e.Message)
End Try

另外,确保在Manifest Editor中声明完整的权限:

AddPermission(android.permission.SEND_SMS)
AddPermission(android.permission.READ_SMS)
AddPermission(android.permission.RECEIVE_SMS)

三、调试建议

使用adb logcat过滤系统日志,搜索与短信、权限相关的关键词(如sms、permission、block),EMUI可能会在系统日志中记录拦截动作,但不会抛出应用可见的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:42:18