Android APN的设置问题 默认“已起用数据” 关闭

来源:互联网 发布:mysql多表外连接查询 编辑:程序博客网 时间:2024/05/29 17:10

说明:

(1),参考:http://myqdroid.blog.51cto.com/2057579/389134

(2),应用的到程序

android2.3.4_GB_T34H\build\core\main.mk

android2.3.4_GB_T34H\development\data\etc\apns-conf.xml

android2.3.4_GB_T34H\development\data\etc\apns-conf_sdk.xml


1,APN的定义:

APN(Access Point Name),即“接入点名称”,是您在通过手机上网时必须配置的一个参数,它决定了您的手机通过哪种接入方式来访问网络,用来标识GPRS的业务种类,目前分为两大类:CMWAP/UNIWAP/3GWAP(通过GPRS访问WAP业务)、CMNET/UNINET/3GNET(除了WAP以外的服务目前都用CMNET,比如连接因特网等)。

2,Android中APN流程分析

apn的流程分析及相关文件
相关文件作如下简单说明:
android2.3.4_GB_T34H\build\core\main.mk
--从该文件[核心Makefile文件]中可以看出有关apn设置的xml文件
摘录如下:
# Install an apns-conf.xml file if one's not already being installed.
ifeq (,$(filter %:system/etc/apns-conf.xml, $(PRODUCT_COPY_FILES)))
  PRODUCT_COPY_FILES += \
        development/data/etc/
apns-conf_sdk.xml:system/etc/apns-conf.xml
  ifeq ($(filter eng tests,$(TARGET_BUILD_VARIANT)),)
    $(warning implicitly installing apns-conf_sdk.xml)
  endif
endif

apns-conf_sdk.xml --android2.3.4_GB_T34H/development/data/etc/apns-conf_sdk.xml
--主要用于生成system/etc/apns-conf.xml文件,生成过程本质上就是原文拷贝(用于sdk模拟

apns.xml -- android2.3.4_GB_T34H/frameworks/base/core/res/res/xml/apns.xml
--该文件实际上在apn的设置方面没有实际意义,然而在android apn设置的逻辑方面却很重要,尤其是里面的version的值。

apns-conf.xml --android2.3.4_GB_T34H/out/target/product/generic/system/etc/apns-conf.xml
--该内容最终打包到system.ext4中:

3,效果查看:

(1)进入terminate

adb shell
cat /system/etc/apns-conf.xml 
注:此文件就是来源于此!!
 
TelephonyProvider.java -- android2.3.4_GB_T34H/packages/providers/TelephonyProvider/src/com/android/providers/telephony/TelephonyProvider.java
--该class主要用于APN的设置,由于源码提供的不符合定制要求,所以要手动修改!
但是修改最终目的是保证在数据库version更新后,能够及时更新维护APN的数据库表内容!
具体该类如何修改,下文会阐述!
首先保证成功运行了Emulator或开发板,查看APN所维护的数据,操作如下:
# adb shell
# cd /data/data/com.android.providers.telephony/databases
# sqlite3 telephony.db
sqlite> .dump carriers
 
4,程序中的实现(参考文章中说要改动java的代码,我这里没有改动,也可以用)

(1)打开android2.3.4_GB_T34H\development\data\etc\apns-conf.xml

对应的名称功能为:这里面要注意红色标出的值。

name3g名称apn3gnetAPNproxynot set代理portnot set端口usernamenot set用户名passwordnot set密码servernot set服务mmscnot set mms proynot set

彩信代理

mms protnot set 彩信端口mmc460 mnc01 authentication  apn type  defaul

APN类型

apn protocol ipv4APN协议   

对应我们要加入的代码部分:

   <!--modify by xu_bin -->

   <apn carrier="3g"

        mcc="460"

        mnc="01"

        apn="3gnet"

        user=""

        password=""

        server=""

        mmsproxy=""

        mmsport=""

        mmsc=""

        type="default"

   />


(2),在编译程序前,删除android2.3.4_GB_T34H\out\target\product\smdkc110\system\etc\apns-conf.xml

(3),编译程序,烧录,下面是我们实现的效果:不用手动设定,自动加入APN上网设定。



5,上网设定自动开启的话,用户不注意的情况下,会产生流量。所以这个功能要用户使用的情况下开启。所以要设定默认为关闭

(1),“设置--无线网络--移动网络--已启用数据”这个选项如果选到了就可以上网,不选不能上网,所以我们默认这个选项关闭。
在程序:android2.3.4_GB_T34H\frameworks\base\services\java\com\android\server\ConnectivityService.java中
[java] view plain copy
  1. /** 
  2.  * @see ConnectivityManager#getMobileDataEnabled() 
  3.  */  
  4. public boolean getMobileDataEnabled() {  
  5.     enforceAccessPermission();  
  6.     boolean retVal = Settings.Secure.getInt(mContext.getContentResolver(),  
  7.            //Settings.Secure.MOBILE_DATA, 1) == 1;  
  8.            Settings.Secure.MOBILE_DATA, 0) == 1;//leilei  ++10.25  
  9.     if (DBG) Slog.d(TAG, "getMobileDataEnabled returning " + retVal);  
  10.     return retVal;  
  11. }  
 Settings.Secure.MOBILE_DATA, 1) == 1;的情况下,选项默认为开, Settings.Secure.MOBILE_DATA, 0) == 1;时,选项默认为关闭。
(2),实现效果如下:

0 0
原创粉丝点击