Android模拟器间无法收发SMS问题求助
Android模拟器间无法收发SMS的排查与解决
针对你遇到的Android 13模拟器(Pixel 2、Pixel 7 Pro)之间无论用自定义应用还是内置SMS都无法收发消息的问题,以下是实用排查步骤:
1. 确认模拟器号码准确性
不要依赖固定的5554/5556,每个模拟器启动时的号码可能因启动顺序、配置变化改变:
- 打开模拟器的「扩展控制」(窗口右侧三个点图标)→「Phone」,查看当前模拟器的准确号码
- 或用adb命令查询:
# 先列出设备 adb devices # 替换emulator-xxx为你的设备名,查询号码 adb -s emulator-xxx shell getprop gsmsim.phone_number
发送时务必使用目标模拟器的真实号码。
2. 检查模拟器网络与移动数据状态
- 确保两个模拟器处于同一主机网络下,且模拟器的「移动数据」开关已开启(下拉状态栏确认)
- 若模拟器显示无信号,可通过「扩展控制」→「Mobile」→「Network Type」切换为LTE/3G,再重启模拟器
3. 配置虚拟运营商
Android 13模拟器默认可能未绑定运营商,导致SMS功能异常:
- 打开「扩展控制」→「Mobile」→「Network Operator」,选择任意运营商(如T-Mobile、AT&T)
- 重启模拟器后再测试SMS收发
4. 排查权限问题(针对自定义应用)
虽然你物理机运行正常,但模拟器中可能未授予权限:
- 确保Manifest中已添加权限:
<uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> - 在代码中添加动态权限申请(Android 6+必需):
if (ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.SEND_SMS}, 100); }
5. 测试模拟器本身的SMS功能
用adb命令直接触发发送,排除应用代码问题:
# 从emulator-5554发送消息到目标号码(替换为实际号码) adb -s emulator-5554 shell am start -a android.intent.action.SENDTO -d sms:5556 --es sms_body "测试消息"
若此命令仍无法发送,说明是模拟器环境问题,可尝试:
- 更新Android Studio模拟器到最新版本
- 切换到Android 12(API 31)模拟器测试,排查Android 13的兼容性bug
- 关闭模拟器的「Wi-Fi通话」功能(设置→网络和互联网→Wi-Fi通话)
6. 重置模拟器
若以上步骤无效,尝试创建新的模拟器AVD,或重置现有模拟器的用户数据:
- 在Android Studio的Device Manager中,选中模拟器→「Wipe Data」,重置后重启测试
内容的提问来源于stack exchange,提问作者PotatoCoder
相关产品推荐
相关产品推荐

