Android APN的設置問題:默認“已起用數據”關閉

關鍵字:android  APN的設置問題 SDK APN設定 默認“已起用數據” 關閉
平臺:S5PC110 S5PV210
系統:android2.3   android2.3.4

說明:

(1),參考:/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的專欄

發佈留言