系統:android2.3 android2.3.4

 

說明:

 

(1),參考:HTTP://www.2cto.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;時,選項默認為關閉。
創作者介紹
創作者 shadow 的頭像
shadow

資訊園

shadow 發表在 痞客邦 留言(0) 人氣()