Android APN的设置问题:默认“已起用数据”关闭
关键字:android APN的设置问题 SDK APN设定 默认“已起用数据” 关闭
平台:S5PC110 S5PV210
系统:android2.3 android2.3.4
说明:
(1),参考:http://www.zzzyk.com/kf/201206/134101.html
(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
对应的名称功能为:这里面要注意红色标出的值。
name | 3g | 名称 |
apn | 3gnet | APN |
proxy | not set | 代理 |
port | not set | 端口 |
username | not set | 用户名 |
password | not set | 密码 |
server | not set | 服务 |
mmsc | not set | |
mms proy | not set | 彩信代理 |
mms prot | not set | 彩信端口 |
mmc | 460 | |
mnc | 01 | |
authentication | ||
apn type | defaul | APN类型 |
apn protocol | ipv4 | APN协议 |
<!--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] /**
* @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;
}
/**
* @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),实现效果如下:
摘自 xubin341719的专栏
补充:移动开发 , Android ,