android中 subid和slotid

概述
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都是合法的值三方app获取slot和subId
这个小节是针对文章下面的评论加的。

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

public int getDefaultDataPhoneId()  默认数据slotId
public static int getDefaultDataSubscriptionId() 默认数据subId


public int getDefaultSmsPhoneId()  默认短信slotId 

public static int getDefaultSmsSubscriptionId() 默认短信subId


public static int getDefaultVoicePhoneId()  默认通话slotId
public static int getDefaultVoiceSubscriptionId() 默认通话subId

public static int getDefaultSubscriptionId() 获取默认subId,上述三个都返回-1的话使用这个

双卡设置中短信和通话的设置只是设置SettingsProvider中的一个字段,而设置数据业务卡槽除了设置数据库字段外还会导致modem的重启、网络类型切换(数据业务卡能上4G,而另一张卡只能用2G)等一系列操作。所以手机开发厂商一般说主卡就是数据业务卡。

互换方法
两个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;
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值