[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的修改。
当前行为: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的修改。
相关文章推荐
- [FAQ04794]如何修改默认数据连接开关
- [FAQ04794]如何修改默认数据连接开关
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台十六(C#开发)-空间数据编辑(上)
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台一(C#开发)-系统功能介绍及展示
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-(GIS)地理信息系统简介
- 大数据环境下基于R语言的数据挖掘平台 之 环境配置
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台十四(C#开发)-元数据库库管理
- 后台接口平台 基于Laravel 开发 快速开发数据接口
- 微软开放技术(中国)携 CKAN 和 OData 技术引入基于 Azure 的开放数据平台
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-系统需求分析
- IBM BigInsights -- 基于 Hadoop 的数据分析平台
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-ArcGIS_Engine中的数据访问
- 基于AutoCAD的空间数据共享平台雏形
- VPX板卡 基于XC7K325T的3U VPX FMC接口数据收发预处理平台
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台十七(C#开发)-空间数据编辑(下)
- 6.0默认打开数据开关
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台二(C#开发)-登录功能模块
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-系统需求分析
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台十五(C#开发)-空间数据导出
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)补充说明