android中mvno的配置

可通过EF_IMSI(6F07) EF_SPN(6F46) EF_PNN (6FC5) EF_GID1(6F3E)来配置

MediaTek手机, 这些配置放在/system/etc 目录下
/system/etc/virtual-spn-conf-by-imsi.xml
/system/etc/virtual-spn-conf-by-efspn.xml
/system/etc/virtual-spn-conf-by-efpnn.xml
/system/etc/virtual-spn-conf-by-efgid1.xml

小米高通版本, 可通过
/system/etc/spn-conf.xml
/system/etc/miui-spn-conf.xml
来配置

参考资料
https://source.android.com/devices/tech/config/carrier

运营商名称显示

1. 涉及到的SIM卡中的几个文件(EF)
EF SPN (Service Provider Name) 6F46
EF SPNI (Service Provider Name Icon) 6FDE

EF SPDI (Service Provider Display Information) 6FCD
EF_PNN (PLMN Network Name) 6FC5
EF_OPL (Operator PLMN List) 6FC6
EF_PNNI (PLMN Network Name Icon) 6FDF

分运营商讨论
电信 PNN和OPL 均为 FF, SPDI不存在
移动 PNN, OPL, SPDI均不存在
电信 PNN和OPL 均为 FF, SPDI不存在

海航:
PNN: 43 0A 81487718D47C8BD3EC32FFFF
OPL: 64F0100000FFFE01
SPN: 00806D77822A79FB52A8FFFFFFFFFFFFFF

蜗牛
PNN: 43 0C 84537738CD0635DFE234BB0C
SPN: 00 80 8717725B79FB52A8 FF FF FF FF FF

2. 文件解释
EF_SPDI (Service Provider Display Information)
服务提供商名称显示(也就是服务提供商的PLMN列表)

A3 80 06 64 F0 01 64 F0 06
本文件为 EF_SPN提供 PLMN列表

EF_PMN (PLMN Network Name)
存储 注册的PLMN的 全称 和/或 简称.
手机应该使用这个文件提供的网络名称, 来代替 手机内置的PLMN名称.
也应带来 从网络中收到的PLMN名称 (参考TS 24.008 即 NITZ Operator Name)

3. SPN的显示条件
bit0 = 1 当前入网的PLMN是HPLMN(即IMSI的前5位) 或者 在SPDI中的PLMN列表中的某个网络时,
除了显示SPN名称, 还要求显示 注册网络PLMN的名称.
所以,这一位通常设置为0, 也就是 不要显示 网络的名称. 因为虚拟运营商 不想显示自己上家的 网络名字
网络名称 可以 由 手机内置, 根据PLMN进行匹配

bit1 = 0 当前入网的PLMN既不是HPLMN也不在SPDI的列表中是, 要求显示 SPN文件中的服务提供商的名字
所以, 这一位也通常设置为0, 以保证漫游时, 除了显示漫游网络的名称, 还显示是SPN文件中的名字
也可以设置为1, 那就 只显示为漫游网络的名字

4. 按照规范, 显示优先级
1) 手机首先在 sim 卡中寻找 EF_SPN 文件
如果文件不存在, 或者 文件虽然存在,但是内容为全FFF
那么就根据 PLMN (由网络下发的PLMN, 或者IMSI中的MCC+MNC)在 手机内置的 PLMN 与 名称 映射表中进行匹配
如果匹配到, 就显示 对应的名字(根据当前手机的语言, 可以显示不同的中英文)
如果匹配不到, 直接显示 PLMN 也就是 MCC+MNC , 如 46007 46008
2) 如果 有 PMN 和 OPL, 那么就用 PMN 覆盖SPN中的值


搜网时,可以看到 PLMN和SPN同时显示


Sim卡信息, 显示当前的SPN

SIM卡SMSP

7F10/6F42 SMSP

FF FF FF FF      Alpha-Identifier记录别名   (长度为Y字节,不固定, 可以为0 )

F4               Parameter Indicators :    
-----这个字节,标明了 哪些参数存在,哪些不存在--------下面是每个bit的含义
1     TP-Destination Address.    传输协议-目的地址,编码标准 TS 23.040 中的SM-TL字段
2     TS-Service Centre Address.  服务中心地址, TS 24.011中的 RP-Destination address Centre Address
3     TP-Protocol Identifier.   协议标识符
4     TP-Data Coding Scheme.    数据编码方案
5     TP-Validity Period.        有效期
6     reserved, set to 1.
7     reserved, set to 1.
8     reserved, set to 1.

111-1 0100  (F4,  TP-Data Coding Scheme 存在,TS-Service Centre Address , TP-Destination Address)
111-1 1101   (FD,  仅TS-Service Centre Address 存在-- only SMSC phone number)
    0才表示参数存在( 比较另类), 1表示不存在



00 80 FF FF      TP-Destination Address
FF FF FF FF
FF FF FF FF

SM-TL (Short Message Transfer Layer)的每个地址字段由以下子字段组成:一个八位字节的地址长度字段、一个八位字节的地址类型字段和一个可变长度的地址值字段。





08 E4 68 31     TS-Service Centre Address
10 70 10 05
F0 FF FF FF




FF                 TP-Protocol Identifier
08                 TP-Data Coding Scheme
FF                 TP-Validity Period

Y字节长度的别名,给这条记录取的名字。
总记录长度为 : 28+Y
如果没有名字的话,那就是28字节
如果记录长度为 2B, 那么 Y= 2B – 28

编码方法

def encode_smsp(smsc, operator_len = 12):
    _al = operator_len * [0xFF]    #alpha Operator Name
    _p_ind = [0xFD]      # Parameters indicator : only SMSC phone number
    _dest_addr = 12*[0xFF] # blank TP-Destination address

    l = (len(smsc) + 3) // 2    # Required bytes
    prefix_flag = 0x91
    digit_str = smsc[:20] + 'F'*(20-len(smsc[:20]))
    _sc_addr = [l, prefix_flag] +  [(int(digit_str[i+1],16)<<4)+int(digit_str[i],16) \
            for i in range(0, 20, 2)]
            
    _pid = [0xFF] # blank protocol ID
    _dcs = [0xFF] # Data Coding Scheme 
    _val = [0xFF] # blank validity period
    
    SMSP = _al + _p_ind + _dest_addr + _sc_addr + _pid + _dcs + _val   
    
    return SMSP 

实例
756D6F62696C65FFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF07910681010001F8FFFFFFFFFFFFFF 马来西亚
FFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF06915689450100FFFFFFFFFFFFFFFF 新加坡
6769666667616666FFFFFFFFFFFFE1FFFFFFFFFFFFFFFFFFFFFFFF0791448720006260FFFFFFFF0000B7 英国
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FFFFFFFFFFFFFFFFFFFFFFFF07912160130300F4FFFFFFFF0000FF 美国
542D4D6F62696C65FFFFFFFFFFFFFFFFF1FFFFFFFFFFFFFFFFFFFFFFFF07912160130300F4FFFFFFFF0000FF 美国
534D532043454E545245FFFFFFFFE1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF 香港
564F4441464F4E45FFFFFFFFE1FFFFFFFFFFFFFFFFFFFFFFFF0791447758100650FFFFFFFF000047 沃达丰
564F4441464F4E45E1FFFFFFFFFFFFFFFFFFFFFFFF07911614051105F1FFFFFFFF0000AD 沃达丰2
FFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF07916629030109F0FFFFFFFFFFFFFF 泰国
534D532043656E747265FFFFFDFFFFFFFFFFFFFFFFFFFFFFFF0791361907001003FFFFFFFFFFFFFF 菲律宾
534D532043656E7472652032FFFFFFE1FFFFFFFFFFFFFFFFFFFFFFFF07914150741294F0FFFFFFFF0000AD 美国莱卡
FFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF0A85258300001FFF54F470FFFFFFFF 香港

国内
FFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF0891683108200065F9FFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF0891683133746802F0FFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF0891683108200065F9FFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF0891683110304405F0FFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF0791135604490200FFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF0891683108200065F9FFFFFFFFFFFF

SIM卡本机号码

EF_MSISDN 7F10/6F40

FF FF FF FF FF FF FF FF FF FF FF FF FF FF       Alpha-Identifier号码别名
08                                              BCD编码的号码长度
91                                              TON(Type of Number)和NPI(Numbering Plan ID)
                                                国际电话号码, ISDN/电话编码
68 81 36 06 62 86 F5 FF FF FF                   86 186 3602 6685
FF                                              Capability/Configuration Identifier
FF                                              Extension1 Record Identifier

CDMA EF_MDN (Mobile Directory Number)
7F26/6F44