Android 10下如何通过ADB或类似方式取消SIM卡锁定?
背景
你已通过ADB调用service call phone 8 i32 <simId> s16 <PUK码> s16 <新PIN码>完成SIM PIN码修改,但操作后自动开启SIM锁定,且尝试的AT+CLCK命令仅对SIM1有效,SIM2无反应。
一、修复AT命令对SIM2的支持问题
AT命令无效的核心原因是你指定的/dev/smd8是SIM1对应的AT端口,SIM2需要使用设备上的另一个SMD端口。
查找所有可用的SMD端口:
adb shell ls /dev/smd*输出会列出类似
/dev/smd8、/dev/smd9、/dev/smd10的端口。针对SIM2发送AT解锁命令:
逐个测试找到SIM2对应的端口,执行命令:adb shell echo "AT+CLCK=\"SC\",0,\"你的PIN码\"\r" > /dev/smd<SIM2端口号>例如如果SIM2对应
/dev/smd9,则命令为:adb shell echo "AT+CLCK=\"SC\",0,\"你的PIN码\"\r" > /dev/smd9通用AT命令发送方式(无需找端口):
部分设备支持通过phone服务直接向指定SIM卡发送AT命令,避免端口查找的麻烦:adb shell service call phone 39 i32 <SIM2的ID> s16 "AT+CLCK=\"SC\",0,\"你的PIN码\""注:
39是sendAtCommand方法的ID,不同设备可能有差异,若无效可通过adb shell service call phone | head -20查看方法列表确认ID;SIM ID通常从0或1开始,可通过adb shell dumpsys telephony.registry查看当前SIM的ID。
二、尝试service call直接禁用SIM锁定
你提到查阅AIDL未找到相关方法,可能是因为部分厂商在标准Android 10的ITelephony AIDL基础上做了扩展。可以尝试以下方式:
查看phone服务的所有方法:
adb shell service call phone | head -30输出会显示每个方法ID对应的参数格式,寻找包含
simLock、disable等关键词的方法。尝试通用的禁用锁定命令:
若找到对应方法(比如方法ID为Y),可执行类似命令:adb shell service call phone Y i32 <simId> i32 0 s16 <你的PIN码>其中
i32 0表示禁用锁定(1为开启),具体参数需匹配方法要求。
验证方法
执行命令后重启设备,检查是否不再弹出SIM锁定界面,或通过adb shell dumpsys telephony.registry | grep SimLock查看锁定状态。
内容的提问来源于stack exchange,提问作者Oran Mac Carthy

