• CDMA Subscription 模式设置


    CDMA手机两种实现模式:

             机卡分离式:用户信息写在单独的UIM卡

             机卡一体式:用户信息写在手机中的

      这个跟CDMA Subscription模式有关,对于我们来说使用的是独立UIM卡,在软件里面使用什么方式,跟一项NV值有关,但这项值却无法使用QXDM来更改,确切的说是改了,重新开机之后值又被写回去了,

      所以这项NV值应当是在代码中设置的,高通一直说在网络设置里面,但是也一直没有找到,看了代码才知道由于某种原因没显示出来,都不管了,直接找到CDMA信息读取模式设置代码改成UIM模式即可。

    下面看这个设置的过程:

    public static void makeDefaultPhone(Context context) {
            //Get cdmaSubscription mode from Settings.Secure
            int cdmaSubscription;
            //从数据库读取cdma Subscription 默认preferredCdmaSubscription
            cdmaSubscription = Settings.Secure.getInt(context.getContentResolver(),
    Settings.Secure.CDMA_SUBSCRIPTION_MODE,
                                preferredCdmaSubscription);
            Log.i(LOG_TAG, "Cdma Subscription set to " + cdmaSubscription);
            
            //传递cdma Subscription 创建RIL
            sCommandsInterface = new RIL(context, networkMode, cdmaSubscription);
            ……
    }

    这里默认的preferredCdmaSubscription就是

      preferredCdmaSubscription = CdmaSubscriptionSourceManager.PREFERRED_CDMA_SUBSCRIPTION;

    而PREFERRED_CDMA_SUBSCRIPTION = SUBSCRIPTION_FROM_NV;         

    这里看到从NV中读取,即用户信息存储在手机上,cdma Subscription的信息都在CdmaSubscriptionSourceManager这个类中维护

     

    但是这跟关于这个NV项有什么关系呢?

    public RIL(Context context, int preferredNetworkType,
                int cdmaSubscription, Integer instanceId) {
                mCdmaSubscription  = cdmaSubscription;
    }        
    
    private void processUnsolicited (Parcel p) {
        case RIL_UNSOL_RIL_CONNECTED: {
            // Initial conditions
            setRadioPower(false, null);
            setPreferredNetworkType(mPreferredNetworkType, null);
            
            //启动RIL建立连接之后,会设置Cdma Subscription 这就是创建java层RIL时传递的
            //此处应当传递到modem,设置了相关的NV项,所以使用工具更改此NV不起作用
            setCdmaSubscriptionSource(mCdmaSubscription, null);
            break;
        }
    }

    所以关于Cdma Subscription 模式的设置,应当重点关注

    CdmaSubscriptionSourceManager

    这个类很简单,是一个Handler,监听维护CDMA subscription模式;

    // Constructor
    private CdmaSubscriptionSourceManager(Context context, CommandsInterface ci) {
        mContext = context;
        mCM = ci;
        //监听Cdma Subscription 模式变化
        mCM.registerForCdmaSubscriptionChanged(this, EVENT_CDMA_SUBSCRIPTION_SOURCE_CHANGED, null);
        mCM.registerForOn(this, EVENT_RADIO_ON, null);
        
        //设置当前Cdma Subscription 获取默认的
        int subscriptionSource = getDefaultCdmaSubscriptionSource();
        mCdmaSubscriptionSource.set(subscriptionSource);
    }

    其他模块获取当前CDMA Subscription模式

    public int getCdmaSubscriptionSource() {
        return mCdmaSubscriptionSource.get();
    }
  • 相关阅读:
    学期总结
    C语言II博客作业04
    C语言I博客作业08
    第十六周助教总结
    C语言||博客作业02
    期末助教总结
    S1 冒泡排序
    关于asp.net HttpUtility.UrlDecode解码问题
    asp.net Sql缓存依赖(SqlCacheDependency)
    解决aps.net 2.0中ajax调用webservice的问题
  • 原文地址:https://www.cnblogs.com/bastard/p/2931621.html
Copyright © 2020-2023  润新知