权限要求: MODIFY_PHONE_STATE 或者 hasCarrierPrivileges
public String iccTransmitApduBasicChannel (int cla, int instruction, int p1, int p2, int p3, String data)
通过基本通道发送 APDU 给 ICC卡, 参数与 TS 27.007 AT CSIM 命令相同
(其实就是对 AT CSIM的封装)
支持AT CSIM的基带据说很少
public String iccTransmitApduLogicalChannel (int channel, int cla, int instruction, int p1, int p2, int p3, String data)
通过逻辑通道 发送APDU给ICC卡, 参数于 TS 27.007 AT CGLA 命令相同
cla int: APDU 命令的类别
instruction int: APDU 命令的 指令码
p1 int: APDU命令的P1
p2 int: APDU命令的P2
p3 int: APDU命令的P3. 如果 p3 是负数, 那么说明这个APDU只有4个字节(CLA INS P1 P2)
data String: 这个APDU携带的数据
public boolean hasCarrierPrivileges ()
本UID下的任何包如果有 运营商 权限, 就返回true
这个权限是有 UICC 的所有者赋予的,而不是 移动网络的运营商
public boolean hasIccCard ()
SIM卡存在否?
public IccOpenLogicalChannelResponse iccOpenLogicalChannel (String AID)
打开逻辑通道 (TS 27.007 AT CCHO)
AID 应用ID,详细信息请参考 ETSI 102.221 和 101.220
public boolean iccCloseLogicalChannel (int channel)
关闭预先打开的逻辑通道 ( 封装 TS 27.007 AT CCHC 命令)
public byte[] iccExchangeSimIO (int fileID, int command, int p1, int p2, int p3, String filePath)
得到 通过SIM_IO发出的APDU的响应
public boolean setVoiceMailNumber (String alphaTag, String number)
修改语音信箱的号码
—————
有很多方法来访问SIM卡上的文件系统。使用AT命令接口是一种最容易想到的方法,但是有一些基带没有合适得AT命令。
有三种方法来访问 Elemenary Files / Dedicated Files文件
1. 使用STK应用(也叫CAT/SAT)
https://android.googlesource.com/platform/packages/apps/Stk.git/ /master
如果这种卡是自己发行的,或者能下载SAT到usim里才可行
2. 打开 RIL socket(http://stackoverflow.com/questions/15361302/how-to-read-msisdn-from-sim-card-by-sim-io) 使用 RIL_REQUEST_SIM_IO来读写 SIM EF
发送 AT CRSM 命令 (restricted SIM access))
requestSIM_IO ()就是调用 AT CRSM来实现的
MTK(MediaTek)对3GPP规范遵循得更好,所以 AT CSIM大部分可用
但是高通
AT CSIM=10,"0020000100"