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();
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM