關鍵字:android APN的設定問題 SDK APN設定 預設“已起用資料” 關閉
平台:S5PC110 S5PV210
系統:android2.3 android2.3.4
說明:
(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 shellcat /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.dbsqlite> .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中
/** * @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),實現效果如下: