华为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
相关产品推荐
相关产品推荐

