android apn xml,android 批改默认APN
Settings > More > Mobile networks > Access Point Names
在此选项中, 我手中的平台,目前是没有任何选项显示的.
代码:
packages/apps/Settings/src/com/android/settings/ApnSettings.java
//以下代码用于构建一个列表, 从数据库中读取数据并填充到表中.
//注意下面的代码有一些过滤条件
private void fillList() {
String where = "numeric=\""
+ android.os.SystemProperties.get(TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC, "")
+ "\"";
String operatorDongle = SystemProperties.get("gsm.dongle.operator");
Log.d(TAG,"fillList:operatorDongle:"+operatorDongle);
if(operatorDongle != null) {
if(!operatorDongle.equals("llll") && false)
where = "numeric=\""+operatorDongle+"\"";
}
//从数据库获取, 下面代码会说明数据库是如何创建及始化的.
Cursor cursor = getContentResolver().query(Telephony.Carriers.CONTENT_URI, new String[] {
"_id", "name", "apn", "type"}, null, null,
Telephony.Carriers.DEFAULT_SORT_ORDER);
PreferenceGroup apnList = (PreferenceGroup) findPreference("apn_list");
apnList.removeAll();
ArrayList mmsApnList = new ArrayList();
mSelectedKey = getSelectedApnKey();
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
String name = cursor.getString(NAME_INDEX);
String apn = cursor.getString(APN_INDEX);
String key = cursor.getString(ID_INDEX);
String type = cursor.getString(TYPES_INDEX);
ApnPreference pref = new ApnPreference(this);
pref.setKey(key);
pref.setTitle(name);
pref.setSummary(apn);
pref.setPersistent(false);
pref.setOnPreferenceChangeListener(this);
boolean selectable = ((type == null) || !type.equals("mms"));
pref.setSelectable(selectable);
if (selectable) {
if ((mSelectedKey != null) && mSelectedKey.equals(key)) {
pref.setChecked();
}
apnList.addPreference(pref);
} else {
mmsApnList.add(pref);
}
cursor.moveToNext();
}
cursor.close();
for (Preference preference : mmsApnList) {
apnList.addPreference(preference);
}
}
数据库创建:
packages/providers/TelephonyProvider/src/com/android/providers/telephony/TelephonyProvider.java
private static class DatabaseHelper extends SQLiteOpenHelper {
// Context to access resources with
private Context mContext;
/**
* DatabaseHelper helper class for loading apns into a database.
*
* @param context of the user.
*/
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, getVersion(context));
mContext = context;
}
private static int getVersion(Context context) {
// Get the database version, combining a static schema version and the XML version
Resources r = context.getResources();
XmlResourceParser parser = r.getXml(com.android.internal.R.xml.apns);
try {
XmlUtils.beginDocument(parser, "apns");
int publicversion = Integer.parseInt(parser.getAttributeValue(null, "version"));
return DATABASE_VERSION | publicversion;
} catch (Exception e) {
Log.e(TAG, "Can't get version of APN database", e);
return DATABASE_VERSION;
} finally {
parser.close();
}
}
@Override
public void onCreate(SQLiteDatabase db) {
// Set up the database schema
db.execSQL("CREATE TABLE " + CARRIERS_TABLE +
"(_id INTEGER PRIMARY KEY," +
"name TEXT," +
"numeric TEXT," +
"mcc TEXT," +
"mnc TEXT," +
"apn TEXT," +
"user TEXT," +
"server TEXT," +
"password TEXT," +
"proxy TEXT," +
"port TEXT," +
"mmsproxy TEXT," +
"mmsport TEXT," +
"mmsc TEXT," +
"authtype INTEGER," +
"type TEXT," +
"current INTEGER," +
"protocol TEXT," +
"roaming_protocol TEXT," +
"carrier_enabled BOOLEAN," +
"bearer INTEGER);");
initDatabase(db);//创建后,初始数据
}
private void initDatabase(SQLiteDatabase db) {
// Read internal APNS data
Resources r = mContext.getResources();
XmlResourceParser parser = r.getXml(com.android.internal.R.xml.apns);//从frameworks/base/core/res/中获取XML并添加到数据库中.
int publicversion = -1;
try {
XmlUtils.beginDocument(parser, "apns");
publicversion = Integer.parseInt(parser.getAttributeValue(null, "version"));
loadApns(db, parser);
} catch (Exception e) {
Log.e(TAG, "Got exception while loading APN database.", e);
} finally {
parser.close();
}
// Read external APNS data (partner-provided)
XmlPullParser confparser = null;
// Environment.getRootDirectory() is a fancy way of saying ANDROID_ROOT or "/system".
File confFile = new File(Environment.getRootDirectory(), PARTNER_APNS_PATH);//从/etc/apns-conf.xml中获取并添加到数据库中.
FileReader confreader = null;
try {
confreader = new FileReader(confFile);
confparser = Xml.newPullParser();
confparser.setInput(confreader);
XmlUtils.beginDocument(confparser, "apns");
// Sanity check. Force internal version and confidential versions to agree
int confversion = Integer.parseInt(confparser.getAttributeValue(null, "version"));
if (publicversion != confversion) {
throw new IllegalStateException("Internal APNS file version doesn't match "
+ confFile.getAbsolutePath());
}
loadApns(db, confparser);
} catch (FileNotFoundException e) {
// It's ok if the file isn't found. It means there isn't a confidential file
// Log.e(TAG, "File not found: '" + confFile.getAbsolutePath() + "'");
} catch (Exception e) {
Log.e(TAG, "Exception while parsing '" + confFile.getAbsolutePath() + "'", e);
} finally {
try { if (confreader != null) confreader.close(); } catch (IOException e) { }
}
}
所以, 一般默认的APN有两个地方可添加:
1. frameworks/base/core/res/res/xml/apns.xml
2. RK平台中,采用此路径:
device/rockchip/common/phone/etc/apns-full-conf.xml
XML的内容如下:
to:
mcc="240"
mnc="08"
apn="sp-services"
proxy="172.030.253.241"
port="8799"
mmsc="http://mms"
mmsproxy="172.30.253.241"
mmsport="8799"
type="default" />
mcc="293"
mnc="64"
apn="internet.t-2.net"
type="default,supl" />
mcc="293"
mnc="64"
apn="mms.t-2.net"
mmsc="http://www.mms.t-2.net:8002/"
mmsproxy="172.20.18.137"
mmsport="8080"
type="mms" />
mcc="218"
mnc="03"
apn="mms.eronet.ba"
user=""
server=""
password=""
mmsc="http://mms.gprs.eronet.ba/mms/wapenc"
mmsproxy="010.012.003.011"
mmsport="8080"
type="mms"/>
mcc="425"
mnc="01"
apn="internet"
type="default" />
mcc="425"
mnc="01"
apn="wap.orange.co.il"
mmsc="http://192.168.220.15/servlets/mms"
mmsport="8080"
type="mms" />
mcc="425"
mnc="01"
apn="Internet"
username="Internet"
password="Internet"
type="default" />
mcc="502"
mnc="19"
apn="celcom3g"
type="default,supl" />
mcc="502"
mnc="19"
apn="celcom3g"
user="mms"
password="mms"
mmsc="http://mms.celcom.net.my"
mmsproxy="10.128.1.242"
mmsport="8080"
type="mms" />
mcc="226"
mnc="03"
apn="wnw"
user="wnw"
password="wnw"
proxy="10.252.1.62"
port="8080"
type="default,supl" />
mcc="525"
mnc="03"
apn="miworld"
user="65"
password="user123"
mmsc="http://mmsgw:8002"
mmsproxy="172.16.14.10"
mmsport="8080"
authenticationtype="PAP"
type="mms" />
mcc="525"
mnc="03"
apn="sunsurf"
type="default,supl,mms" />
mcc="734"
mnc="02"
apn="gprsweb.digitel.ve"
mmsc="http://expresate.digitel.ve"
mmsproxy="213.026.205.001"
mmsport="8080"
type="default,supl,mms" />
mcc="262"
mnc="03"
apn="internet.eplus.de"
user="eplus"
password="gprs"
type="default,supl" />
mcc="262"
mnc="03"
apn="mms.eplus.de"
user="blau"
password="blau"
mmsc="http://mms/eplus"
mmsproxy="212.23.97.153"
mmsport="5080" type="mms" />
mcc="220"
mnc="03"
apn="gprswap"
user="mts"
password="064"
proxy="172.017.088.198"
port="8080"
type="default" />
mcc="220"
mnc="03"
apn="mms"
user="mts"
password="064"
mmsc="http://mms.mts064.telekom.rs/mms/wapenc"
mmsproxy="172.017.085.131"
mmsport="8080"
type="mms" />
mcc="234"
mnc="01"
apn="prepay.tesco-mobile.com"
user="tescowap"
password="password"
server="http://wap.tesco-mobile.com/"
proxy="193.113.200.195"
port="9201"
type="default,supl,mms" />
mcc="502"
mnc="13"
apn="celcom"
type="default,supl" />
mcc="502"
mnc="13"
apn="celcom3g"
user="mms"
password="mms"
mmsc="http://mms.celcom.net.my"
mmsproxy="10.128.1.242"
mmsport="8080"
type="mms" />
mcc="310"
mnc="450"
apn="internet.vedge.com"
user=""
password=""
server=""
proxy="10.168.3.23"
port="9401"
type="default" />
mcc="310"
mnc="450"
apn="mms"
user=""
password=""
server=""
mmsc="http://mms.viaero.com"
mmsproxy="10.168.3.23"
port="9401"
typ="mms" />
mcc="502"
mnc="13"
apn="celcom"
type="default,supl" />
mcc="502"
mnc="13"
apn="celcom3g"
user="mms"
password="mms"
mmsc="http://mms.celcom.net.my"
mmsproxy="10.128.1.242"
mmsport="8080"
type="mms" />
mcc="714"
mnc="01"
apn="apn02.cwpanama.com.pa"
mmsc="http://mms.zonamovil.com.pa:80/i.bin"
mmsproxy="172.25.3.5"
port="8080"
type="mms" />
mcc="234"
mnc="15"
apn="uk.lebara.mobi"
user="web"
password="web"
type="default,supl" />
mcc="234"
mnc="15"
apn="uk.lebara.mobi"
user="web"
password="web"
server="*"
mmsc="http://mms.lebara.co.uk/servlets/mms"
mmsproxy="212.183.137.012"
mmsport="8799"
type="default,supl,mms" />
mcc="238"
mnc="02"
apn="internet.sp.dk"
user=""
server=""
password=""
proxy="212.088.064.008"
port="" mmsproxy="212.088.064.008"
mmsport="8080"
mmsprotocol="null"
mmsc="http://mms.telenor.dk"
type="" />
mcc="238"
mnc="02"
apn="internet.sp.dk"
user="" server=""
password=""
proxy="212.088.064.008"
port=""
mmsproxy="212.088.064.008"
mmsport="8080"
mmsprotocol="null"
mmsc="http://mms.telenor.dk"
type="" />
mcc="238"
mnc="02"
apn="telenor"
user=""
server=""
password=""
proxy=""
port=""
mmsproxy="212.088.064.008"
mmsport="8080"
mmsprotocol="null"
mmsc="http://mms.telenor.dk"
type="mms" />
mcc="238"
mnc="02"
apn="telenor"
user=""
server=""
password=""
proxy=""
port=""
mmsproxy="212.088.064.008"
mmsport="8080"
mmsprotocol="null"
mmsc="http://mms.telenor.dk"
type="mms" />
mcc="240"
mnc="02"
apn="data.tre.se"
type="default,supl" />
mcc="426"
mnc="01"
apn="mms.batelco.com"
user="wap"
password="wap"
mmsc="http://192.168.36.10/servlets/mms"
mmsport="80"
type="mms" />
mcc="208"
mnc="15"
apn="free"
type="default,supl" />
mcc="724"
mnc="05"
apn="java.claro.com.br"
user="claro"
password="claro"
type="default,supl" />
mcc="302"
mnc="220"
apn="isp.telus.com"
mmsc="http://aliasredirect.net/proxy/mmsc"
mmsproxy="74.49.0.18"
mmsport="80"
type="default,supl,mms" />
mcc="208"
mnc="10"
apn="fnetnrj"
type="default,supl" />
mcc="208"
mnc="10"
apn="mmsnrj"
mmsproxy="010.143.156.005"
mmsport="8080"
mmsc="http://mmsnrj"
type="mms" />
android apn xml,android 批改默认APN相关推荐
- android应用apn.xml,android之APN
APN全称是Access Point Name,中文即接入点,是通过手机上网时必须配置的一个参数,它决定了手机通过哪种接入方式来访问网络. android系统把所有的APN都保存在数据库中,数据库绝对 ...
- android 组装xml,Android中组装xml文件内容
在Android开发中经常遇到组装xml格式数据的需求,下面是解决方法,希望给大家带来帮助. 下面这段xml文件内容是我们的需求. zhangsan 26 lisi 25 下面是组装xml文件内容的代 ...
- android dimensions.xml,[Android Studio #2] 操作資源XML檔
利用Android Studio產生出第一個程式後,點擊Project按鈕觀察專案的目錄結構,再研究資源檔的使用方法,同時在第一個程式畫面裡增加另一個文字元件. Android Studio的專案目錄 ...
- android 构造xml,android 中生成xml文件
在Android中生成xml文件真的很简单,下面提供2中方法,一种是通过String写入到文件,另外一种是通过XML 的 XmlSerializer. 以后遇到Android写xml内容就不会困惑了 ...
- android+阴影+xml,Android 阴影视图 ShadowViewHelper
软件介绍 ShadowViewHelper 是 Android 的阴影布局. xml: android:id="@+id/activity_main_shadow_view_b" ...
- android alphaanimation xml,android AlphaAnimation动画代码实现与XML实现
Alp 动画,就是透明到不透明. 主要的参数,from,to,dua 核心代码 AlphaAnimation alp = new AlphaAnimation(0, 1); alp.setDurati ...
- android iconfont xml,Android IconFont
一.简介 Iconfont是阿里巴巴出版的矢量文字图标,目前仅支持单色的图标,优势在于体积小,使用方便,在Android中应用iconfont,可以减少安装包的体积. 二.使用方法 把iconfont ...
- android draw xml,Android使用XML定义渐变的drawable
Android使用XML定义渐变的drawable Android,xml,drawable,渐变, 不是什么东西都需要美术来做图,利用Android提供的线程的东西,也能作出一下效果出来.当然比较负 ...
- android animate xml,Android Animate旋轉
我在Android代碼中做了一些挖掘,並看到了在不確定進度條中的使用.試圖創建自己繪製這個標籤後:Android Animate旋轉 android:drawable="@drawable/ ...
最新文章
- MATLAB基本操作(九):可视化矩阵的矢量场quiver函数
- 模板会有多层镜像_创建镜像的方法有三种:基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile创建,本博文讲解前两种。基于已有镜像的容器创建该方法是使用docke...
- 两种方法实现在HTML页面加载完毕后运行某个js
- SNAT,是源地址转换,其作用是将ip数据包的源地址转换成另外一个地址
- 收到计算机系统公司退款会计分录,企业账户收到退款,怎么做账务处理?
- mvc php 分页,MVC+jQuery.Ajax异步实现增删改查和分页_jquery
- 禁用Chrome自动更新
- ASP中常用的服务器检测源代码
- 易语言卷帘菜单与json_易语言卷帘式菜单加背景图片源码
- [导入]代理猎手找大学代理
- HTML_BOM-01
- [笔记分享] [Camera] msm8x25 camera hal 流程记录
- 使用cmd命令 关机
- PHP 获取格式化的日期和时间
- SSD-Tensorflow项目源码学习:将数据集转化为为TFR文件
- (解决)PHP GD 插入PNG图片后透明背景变灰色
- h5 视频活体检测(人脸认证)的前端
- 【程序设计】定时任务调度平台需求说明书
- 我的世界java版如何看坐标_坐标 - Minecraft Wiki,最详细的官方我的世界百科
- 人类dna信息量_古人类DNA揭人类演化史 白肤碧眼1万年前才出现