您的位置:首页 > 其它

[FAQ19898]基于N平台的默认数据开关定制

2017-09-05 10:13 459 查看
[DESCRIPTION]

 

 当前行为:N平台上插入新卡时,进入datausage界面,两个数据开关均是打开的。

 期望行为:插入新卡,进入datausage界面,两个数据开关均关闭,

               或者默认数据卡的数据开关打开,非数据卡的数据开关关闭。

 

 

[SOLUTION]

      

  假设软件版本是:OM

 定制方式如下:

   /frameworks/opt/telephony/src/java/com/android/internal/telephony/dataconnection/DcTracker.java

   getDataEnabled():
需求1:插入新卡,两张卡的数据开关均关闭
solution: 设置ro.com.android.mobiledata 为false即可:
具体可在代码中直接修改:

boolean retVal =false; /* "true".equalsIgnoreCase(SystemProperties.get(

"ro.com.android.mobiledata", "true"));*/
 
需求2:插入新卡时,默认数据卡的数据开关打开,非数据卡的数据开关关闭
solution: 分两步完成
 step1: 设置ro.com.android.mobiledata 为true
  具体可在代码中直接修改:

  boolean retVal =true;  /* "true".equalsIgnoreCase(SystemProperties.get(

               "ro.com.android.mobiledata", "true"));*/
step2: 双卡逻辑处,去掉TelephonyManager.getIntWithSubId方法的调用,替换为直接读取数据库
--   retVal = TelephonyManager.getIntWithSubId(mResolver,

--        Settings.Global.MOBILE_DATA, phoneSubId) != 0;
++ phoneSubId = mPhone.getSubId();

++ retVal = Settings.Global.getInt(mResolver,

++        Settings.Global.MOBILE_DATA + phoneSubId) != 0;

++ log("getDataEnabled: getInt retVal=" + retVal+",phoneSubId ="+phoneSubId);
 step 3: 当没有读到数据库的值时,走handleMobileDataSettingNotFound 方法去设置默认数据开关

         

4064      } catch (SettingNotFoundException e) {

4065                if (OPERATOR_OM.equals(SystemProperties.get(PROPERTY_OPERATOR, OPERATOR_OM))) {
                           //位置1: 如果是OM的版本,直接调用handleMobileDataSettingNotFound(retVal)

                        ++    handleMobileDataSettingNotFound(retVal);  //add by MTK

                           

4066                    // Follow AOSP, use existing retVal

4067                } else {

4068                    if (!SubscriptionManager.isValidSubscriptionId(phoneSubId)
注意:在插新卡的时候,数据库Settings.Global.MOBILE_DATA是没有值的,读取失败,会走入catch逻辑。

在catch逻辑里判断软件版本,我们的软件一般有OM, op01(移动), op02(联通), op09(电信)等

按照MTK原始的逻辑,对OM是没有定制的,而其他的版本会调用handleMobileDataSettingNotFound(retVal)来处理
handleMobileDataSettingNotFound(retVal)中的逻辑,原则上就是:

   if ro.com.android.mobiledata==false -> 两个数据开关都关闭

   if ro.com.android.mobiledata==true -> 默认数据卡的数据开关打开,另一张卡的数据开关关闭
M版本与N版本的区别:
 1.M版本没有step2和step3, 在M的代码中双卡逻辑直接读取数据库,没有调用 TelephonyManager.getIntWithSubId来处理,且在catch的逻辑里,不区分OM的版本和其他的版本

 2.M的逻辑在handleMobileDataSettingNotFound方法中针对op09有特殊定制
综上,M和N的版本修改方法如下:
M:只需要step1
N: step 1 & step2 必须, 如果是OM的版本,则需要有step3的修改。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐