android2.3 添加关闭数据开关功能

android2.3 添加关闭数据开关功能:

1. 在调试完android2.3支持中兴MF210 3G模块后发现在android setting界面上关闭数据开关却不起实质作用,就是关闭数据开关只是关闭了通知栏上面的G显示,但对上网通断并没有影响,再打开数据开关,也只是打开了通知栏上的G显示。

2. 直接在终端用命令svc data disable 或svc data enable也是只能关闭或打开通知栏显示状态而已,但是在用命令关闭的时候,马上打开android内置浏览器会弹出“数据关闭无法连接网络”之类的,但是网络还是可以继续登陆上去。就是说关闭网络流程是对了,只是不知道是在哪可能有一个标识已经通知“网络已经关闭了”,但是执行关闭的操作却出错了或者说返回有错致使网络最后并没有被真正关闭。

3.修改移动数据开关默认状态

 \frameworks\base\services\java\com\android\server\ConnectivityService.java
  public boolean getMobileDataEnabled() {
        enforceAccessPermission();
        boolean retVal = Settings.Secure.getInt(mContext.getContentResolver(),
              //  Settings.Secure.MOBILE_DATA, 1) == 1;//数据开关默认打开
              Settings.Secure.MOBILE_DATA, 0) == 1; //add by boardcon 数据开关默认关闭
        if (DBG) Slog.d(TAG, "getMobileDataEnabled returning " + retVal);
        return retVal;
    }

4. 数据开关未能正常关闭分析:调试华为模块时有在Reference-ril.c中requestSetupDataCall函数成功后通过property_set("net.pppd.gprs", "start")函数开启了ppp连接,而假如要停止ppp连接则需要在响应RIL_REQUEST_DEACTIVATE_DATA_CALL请求中执行property_set("net.pppd.gprs", "stop")函数,而响应RIL_REQUEST_DEACTIVATE_DATA_CALL请求可在requestDeactivateDataCall函数中实现,但是通常android中并未实现requestDeactivateDataCall函数,若有需求则需要自行添加。

5.添加处理RIL_REQUEST_DEACTIVATE_DATA_CALL请求:

(1)\frameworks\base\telephony\java\com\android\internal\telephony\RIL.java 中,把 
 case RIL_REQUEST_DEACTIVATE_DATA_CALL: ret =  responseVoid(p); break; 改成
 case RIL_REQUEST_DEACTIVATE_DATA_CALL: ret =  responseStrings(p); break;

(2)\hardware\ril\libril\Ril_commands.h 中,把
 {RIL_REQUEST_DEACTIVATE_DATA_CALL, dispatchStrings, responseVoid},改成
   {RIL_REQUEST_DEACTIVATE_DATA_CALL, dispatchStrings, responseStrings},

(3)\hardware\ril\reference-ril\Reference-ril.c 中,在
   case RIL_REQUEST_SETUP_DATA_CALL:
            requestSetupDataCall(data, datalen, t);
            break;后添加
  
   case RIL_REQUEST_DEACTIVATE_DATA_CALL: 
    requestDeactivateDataCall(t, data, datalen);
    break;

(4)\hardware\ril\reference-ril\Reference-ril.c 中,在

static void requestSetupDataCall(void *data, size_t datalen, RIL_Token t)

    ……
    ……
error:
    RIL_onRequestComplete(t, RIL_E_GENERIC_FAILURE, NULL, 0);
    at_response_free(p_response);
}添加:


void requestDeactivateDataCall(RIL_Token t, void *data, int length)
{

 RIL_onRequestComplete(t, RIL_E_SUCCESS, NULL, 0);
 property_set("net.pppd.gprs", "stop");
 //LOGE(" em210 net.pppd.gpr stop\n");
}
6. 编译烧写即可。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值