Users can go to Settings-->Wireless control-->Mobile networks-->Access point names to view and edit existing APNs.
Google Android uses a SQLite data table to store all APNs configured on the device, as shown below:
Database: /data/data/com.android.providers.telephony/databases/telephony.db
Table: carriers
URI: content://telephony/carriers
frameworks/base/core/res/res/xml/apns.xml // Android自帶的內部APN配置文件
system/etc/apns-conf.xml // 第三方提供的APN配置
在編譯該product時會將device/generic/goldfish/data/etc/apns-conf.xml文件拷貝到system/etc/目錄下,最後打包到system.img中。
packages/providers/TelephonyProvider/src/com/android/providers/telephony/TelephonyProvider.java // 初始化操作
com.android.providers.telephony.TelephonyProvider.DatabaseHelper.onCreate(SQLiteDatabase) // 創建數據表carriers,用來保存apn配置信息
com.android.providers.telephony.TelephonyProvider.DatabaseHelper.initDatabase(SQLiteDatabase) // 從指定路徑讀取apn配置文件
com.android.providers.telephony.TelephonyProvider.DatabaseHelper.loadApns(SQLiteDatabase, XmlPullParser) // Loads apns from xml file into the database
settings中對apn的操作:
packages/apps/Settings/src/com/android/settings/ApnEditor.java
packages/apps/Settings/src/com/android/settings/ApnPreference.java
packages/apps/Settings/src/com/android/settings/ApnSettings.java
參考: