• 如何通过subId来获取phoneId?


    androidL中使用一张数据表来保存sim卡信息:telephony.db中有一张记录SIM卡信息的表,siminfo:

    CREATE TABLE siminfo(_id INTEGER PRIMARY KEY AUTOINCREMENT,icc_id TEXT NOT NULL,sim_id INTEGER DEFAULT -1,display_name TEXT,carrier_name TEXT,name_source INTEGER DEFAULT 0,color INTEGER DEFAULT 0,number TEXT,display_number_format INTEGER NOT NULL DEFAULT 1,data_roaming INTEGER DEFAULT 0,mcc INTEGER DEFAULT 0,mnc INTEGER DEFAULT 0);

    一行记录实例如下:

    INSERT INTO "siminfo" VALUES(1,'89860114831010865147',0,'中国联通','中国联通3G',0,-16746133,'+8618516657794',1,0,460,1);

    其中,主键_id就类似SIM卡的id,其值是从1开始递增的,sim_id类似于slot id,在双卡版本中一般只有-1/0/1三个值;其余的属性都好理解。

    那如何去对应_id和sim_id呢?如函数:
    SubscriptionController.getPhoneId(subId): // 根据subId取得phoneId
    foreach  entry: mSlotIdxToSubId.entrySet() // 具体代码,遍历mSlotIdxToSubId
        int sim = entry.getKey(); // 对应siminfo表中的sim_id字段
        int sub = entry.getValue(); // 对应siminfo表中的_id字段
        if (subId == sub) { return sim; } // 正常流程下,这里返回的值会作为phoneId;

    就是说传入的参数subId值等于siminfo表中的某行SIM的_id值,返回其sim_id字段,这个字段代表了phone id。


    可以参考mSlotIdxToSubId 中的元素是这样填充的:

    mSlotIdxToSubId.put(slotId, subId); // slotId:the slot which the SIM is inserted; subId:siminfo表中_id字段,一个例子:

                   _id = 3
                   icc_id = 89860114831010865147
                   sim_id = 1

  • 相关阅读:
    Oracle数据库中truncate命令和delete命令的区别
    数组中只出现一次的数字
    数对之差的最大值
    SQL Server: Difference Between Locking, Blocking and Dead Locking
    字符串处理
    Phpcms_V9任意文件上传
    最初的梦想
    陪你走过漫长岁月
    基于MitM的RDP降级攻击
    CVE-2017-0358
  • 原文地址:https://www.cnblogs.com/caidi/p/4581816.html
Copyright © 2020-2023  润新知