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

Android11三星设备发短信报java.lang.SecurityException uid不匹配怎么办

异常触发原因

这是搭载Android 11系统的三星设备独有的ROM定制bug,三星修改了原生SmsManager的权限校验逻辑,在调用getSmsManagerForSubscriptionId()获取指定SIM卡对应的SmsManager实例发送短信时,系统错误地要求当前应用的UID必须和系统短信进程com.android.phone的UID一致,二者本身属于不同的进程,UID天然不匹配,最终就会抛出该安全异常。
原生Android系统不存在这层错误的校验逻辑,其他品牌的Android 11设备、三星非Android 11版本的设备都不会触发该问题。

可行解决方案

  • 通用兼容方案:针对三星Android 11设备规避使用getSmsManagerForSubscriptionId()接口,降级使用SmsManager.getDefault()获取默认SmsManager实例,走系统默认SIM卡的短信发送逻辑。如果业务需要指定SIM卡发送,可提前引导用户将目标SIM卡设置为系统默认短信SIM卡。
  • 异常兜底方案:在短信发送逻辑中添加SecurityException捕获,捕获到异常后判断当前设备是否为Android 11版本的三星设备,如果匹配则自动切换为SmsManager.getDefault()重新发起短信发送请求,不影响其他正常设备的指定SIM卡发送逻辑。
  • 特殊场景方案:如果是系统签名应用或者内部定制应用,可申请android.permission.MODIFY_PHONE_STATE权限,绕过三星系统的错误UID校验,即可正常使用getSmsManagerForSubscriptionId()接口指定SIM卡发送短信。该权限为系统级权限,普通第三方应用无法通过应用商店上架获取,不建议普通应用使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:36:04