您的位置:首页 > 移动开发 > Android开发

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

2017-04-29 09:16 651 查看
说明:

(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名称
apn3gnetAPN
proxynot set代理
portnot set端口
usernamenot set用户名
passwordnot set密码
servernot set服务
mmscnot set 
mms proynot set彩信代理

mms protnot set 彩信端口
mmc460 
mnc01 
authentication  
apn type  defaulAPN类型

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

/** 

 * @see ConnectivityManager#getMobileDataEnabled() 

 */  

public boolean getMobileDataEnabled() {  

    enforceAccessPermission();  

    boolean retVal = Settings.Secure.getInt(mContext.getContentResolver(),  

           //Settings.Secure.MOBILE_DATA, 1) == 1;  

           Settings.Secure.MOBILE_DATA, 0) == 1;//leilei  ++10.25  

    if (DBG) Slog.d(TAG, "getMobileDataEnabled returning " + retVal);  

    return retVal;  

}  

 Settings.Secure.MOBILE_DATA, 1) == 1;的情况下,选项默认为开, Settings.Secure.MOBILE_DATA, 0) == 1;时,选项默认为关闭。

(2),实现效果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐