subid和slotid

来源:互联网 发布:java创建一个表格 编辑:程序博客网 时间:2024/06/02 02:34

概述

slotid或者phoneid是指卡槽,双卡机器卡槽一值为0,卡槽2为1,以此类推,不过国内也就双卡和单卡机器了,三卡机器只听说在遥远的印度有。

subid用过数据库的同学比较好理解,subid就是主键递增项,值从1开始,机器每插入一个新卡(iccid是没有见的,值就会加1,iccid每个sim卡是唯一的)。插入双卡后数据库中就会有subid值为1和2的两个数据条目,拔卡插卡交换卡槽数据库并不会增加新项,只有插入一张新的sim卡才会增加一条id为3的数据条目

subid是跟卡走的,slotid是跟卡槽走的。一般来说slotid比较好理解,subid不好理解。

Android5.0之后google终于加入了多sim卡的代码,5.0之前的多卡(一般也就是双卡)机制是各写各的,mtk和高通的代码各有千秋,但是基本上用slotid较多,subid只有mtk在用也很少。Google一同千秋后subid反而用的比slotid多了,例如TelephonyManager:

frameworks/base/telephony/java/android/telephony/TelephonyManager.java

    public int getSimState(int slotIdx) 
 public String getSimOperator(int subId) 

都是int类型,但是一定要瞪大研究看清楚是subid还是slotid,按照一般情况双卡机器一般也就插两张卡,那么subid可以是1和2,slotid是0和1,拿一张卡做开发的同学可能掉到坑里,因为1对subid还是slotid都是合法的值

互换方法

两个id互换的方法在SubscriptionManager类中

frameworks/base/telephony/java/android/telephony/SubscriptionManager.java

public static int getSubIdUsingPhoneId(int phoneId)public static int getSlotId(int subId)

getSubIdUsingPhoneId方法是mtk加的,高通的可以用下面:

    public static int getSubIdbySlot(Context ctx, int slot) {      int subid[] =  SubscriptionManager.getSubId(slot);    if(subid != null) {    return subid[0];        }    return SubscriptionManager.INVALID_SUBSCRIPTION_ID;    }
0 0
原创粉丝点击